diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml index eb11fe008e..db8dcd6785 100644 --- a/.github/workflows/docker.yaml +++ b/.github/workflows/docker.yaml @@ -174,7 +174,7 @@ jobs: uses: docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd # pin@v4.0.0 - name: Set up cosign if: github.event_name != 'pull_request' - uses: sigstore/cosign-installer@cad07c2e89fa2edd6e2d7bab4c1aa38e53f76003 # pin@v4.1.1 + uses: sigstore/cosign-installer@6f9f17788090df1f26f669e9d70d6ae9567deba6 # pin@v4.1.2 - name: Check if Dockerhub login is required id: docker_login run: | diff --git a/.github/workflows/import_export.yaml b/.github/workflows/import_export.yaml index a2670b77a3..6cf00b0408 100644 --- a/.github/workflows/import_export.yaml +++ b/.github/workflows/import_export.yaml @@ -93,7 +93,7 @@ jobs: invoke dev.setup-test -i - name: Create Plugin Data run: | - pip install -U inventree-dummy-app-plugin + pip install -U inventree-dummy-app-plugin==0.1.0 invoke migrate cd src/backend/InvenTree && python manage.py create_dummy_data - name: Export Postgres Dataset diff --git a/.github/workflows/qc_checks.yaml b/.github/workflows/qc_checks.yaml index 50f12792d6..b877b5aff4 100644 --- a/.github/workflows/qc_checks.yaml +++ b/.github/workflows/qc_checks.yaml @@ -10,7 +10,7 @@ on: env: python_version: 3.11 - node_version: 20 + node_version: 24 # The OS version must be set per job server_start_sleep: 60 @@ -101,8 +101,8 @@ jobs: echo "submit-performance=false" >> "$GITHUB_OUTPUT" fi - pre-commit: - name: Style [pre-commit] + code-style: + name: Style [prek] runs-on: ubuntu-24.04 needs: paths-filter if: needs.paths-filter.outputs.cicd == 'true' || needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.frontend == 'true' || needs.paths-filter.outputs.requirements == 'true' || needs.paths-filter.outputs.force == 'true' @@ -116,8 +116,8 @@ jobs: with: python-version: ${{ env.python_version }} cache: "pip" - - name: Run pre-commit Checks - uses: pre-commit/action@2c7b3805fd2a0fd8c1884dcaebf91fc102a13ecd # pin@v3.0.1 + - name: Run pre commit hook Checks + uses: j178/prek-action@6ad80277337ad479fe43bd70701c3f7f8aa74db3 # pin@v2 - name: Check Version run: | pip install --require-hashes -r contrib/dev_reqs/requirements.txt @@ -126,7 +126,7 @@ jobs: typecheck: name: Style [Typecheck] runs-on: ubuntu-24.04 - needs: [paths-filter, pre-commit] + needs: [code-style, paths-filter] if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.requirements == 'true' || needs.paths-filter.outputs.force == 'true' steps: @@ -222,7 +222,7 @@ jobs: echo "Downloaded api.yaml" - name: Running OpenAPI Spec diff action id: breaking_changes - uses: oasdiff/oasdiff-action/diff@f8cb9308b42121e793f835bd14c0b8090420430c # pin@main + uses: oasdiff/oasdiff-action/diff@6147a58e5d1249a12f42fc864ab791d571a30015 # pin@main with: base: "api.yaml" revision: "src/backend/InvenTree/schema.yml" @@ -310,7 +310,7 @@ jobs: name: Tests - inventree-python runs-on: ${{ needs.paths-filter.outputs.runner-perf }} - needs: ["pre-commit", "paths-filter"] + needs: ["code-style", "paths-filter"] if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' || needs.paths-filter.outputs.performance == 'true' permissions: contents: read @@ -329,7 +329,7 @@ jobs: INVENTREE_SITE_URL: http://127.0.0.1:12345 INVENTREE_DEBUG: true INVENTREE_LOG_LEVEL: WARNING - node_version: '>=20.19.6' + node_version: '>=24' steps: - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 @@ -363,7 +363,7 @@ jobs: pip install . if: needs.paths-filter.outputs.submit-performance == 'true' - name: Performance Reporting - uses: CodSpeedHQ/action@658a901452bb54c799643e060733b7afe9121b8d # pin@v4.14.0 + uses: CodSpeedHQ/action@3194d9a39c4d46684cb44bf7207fc56626aad8fd # pin@v4.15.1 # 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: @@ -374,7 +374,7 @@ jobs: name: Tests - DB [SQLite] + Coverage ${{ matrix.python_version }} runs-on: ubuntu-24.04 - needs: ["pre-commit", "paths-filter"] + needs: ["code-style", "paths-filter"] if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' continue-on-error: true # continue if a step fails so that coverage gets pushed strategy: @@ -426,7 +426,7 @@ jobs: name: Tests - Performance runs-on: ${{ needs.paths-filter.outputs.runner-perf }} - needs: ["pre-commit", "paths-filter"] + needs: ["code-style", "paths-filter"] # check if we are in inventree/inventree - reporting only works in that OIDC context if: (needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true') && github.repository == 'inventree/InvenTree' && needs.paths-filter.outputs.submit-performance == 'true' permissions: @@ -452,9 +452,9 @@ jobs: update: true npm: true env: - node_version: '>=20.19.0' + node_version: '>=24' - name: Performance Reporting - uses: CodSpeedHQ/action@658a901452bb54c799643e060733b7afe9121b8d # pin@v4.14.0 + uses: CodSpeedHQ/action@3194d9a39c4d46684cb44bf7207fc56626aad8fd # pin@v4.15.1 with: mode: walltime run: inv dev.test --pytest @@ -462,7 +462,7 @@ jobs: postgres: name: Tests - DB [PostgreSQL] runs-on: ubuntu-24.04 - needs: ["pre-commit", "paths-filter"] + needs: ["code-style", "paths-filter"] if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' env: @@ -512,7 +512,7 @@ jobs: name: Tests - DB [MySQL] runs-on: ubuntu-24.04 - needs: ["pre-commit", "paths-filter"] + needs: ["code-style", "paths-filter"] if: needs.paths-filter.outputs.server == 'true' || needs.paths-filter.outputs.force == 'true' env: @@ -668,7 +668,7 @@ jobs: name: Tests - Web UI runs-on: ubuntu-24.04 timeout-minutes: 60 - needs: ["pre-commit", "paths-filter"] + needs: ["code-style", "paths-filter"] if: needs.paths-filter.outputs.frontend == 'true' || needs.paths-filter.outputs.force == 'true' services: postgres: @@ -779,7 +779,7 @@ jobs: zizmor: name: Security [Zizmor] runs-on: ubuntu-24.04 - needs: ["pre-commit", "paths-filter"] + needs: ["code-style", "paths-filter"] if: needs.paths-filter.outputs.cicd == 'true' || needs.paths-filter.outputs.force == 'true' permissions: @@ -789,13 +789,5 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # pin@v6.0.2 with: persist-credentials: false - - 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@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # pin@v3 - with: - sarif_file: results.sarif - category: zizmor + - name: Run zizmor 🌈 + uses: zizmorcore/zizmor-action@b1d7e1fb5de872772f31590499237e7cce841e8e # v0.5.3 diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 56debc6675..9cdf67065d 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -78,26 +78,21 @@ jobs: subject-path: "${{ github.workspace }}/src/backend/InvenTree/web/static/frontend-build.zip" - name: Upload frontend - 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 - asset_name: frontend-build.zip - tag: ${{ github.ref }} - overwrite: true + run: gh release upload ${REF} src/backend/InvenTree/web/static/frontend-build.zip#frontend-build.zip + env: + REF: ${{ github.ref_name }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - name: Upload frontend to artifacts uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # pin@v7.0.1 with: name: frontend-build path: src/backend/InvenTree/web/static/frontend-build.zip - name: Upload Attestation - uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # pin@2.11.5 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - asset_name: frontend-build.intoto.jsonl - file: ${{ steps.attest.outputs.bundle-path}} - tag: ${{ github.ref }} - overwrite: true + run: gh release upload ${REF} ${BUNDLE_PATH}#frontend-build.intoto.jsonl + env: + REF: ${{ github.ref_name }} + BUNDLE_PATH: ${{ steps.attest.outputs.bundle-path}} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} docs: runs-on: ubuntu-24.04 @@ -134,13 +129,10 @@ jobs: cd docs/site zip -r docs-html.zip * - name: Publish documentation - uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # pin@2.11.5 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: docs/site/docs-html.zip - asset_name: docs-html.zip - tag: ${{ github.ref }} - overwrite: true + run: gh release upload ${REF} docs/site/docs-html.zip#docs-html.zip + env: + REF: ${{ github.ref_name }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} build-pkgr: if: github.repository == 'inventree/InvenTree' @@ -244,10 +236,9 @@ jobs: channel: ${{ env.pkg_channel }} file: ${{ steps.package.outputs.package_path }} - name: Publish to artifact - uses: svenstaro/upload-release-action@29e53e917877a24fad85510ded594ab3c9ca12de # pin@2.11.5 - with: - repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ${{ steps.package.outputs.package_path }} - asset_name: ${{ matrix.target }}-{{ steps.setup.outputs.version }}.tar.gz - tag: ${{ github.ref }} - overwrite: true + run: gh release upload ${REF} ${PACKAGE_PATH}#${PACKAGE_NAME} + env: + REF: ${{ github.ref_name }} + PACKAGE_PATH: ${{ steps.package.outputs.package_path }} + PACKAGE_NAME: ${{ matrix.target }}-{{ steps.setup.outputs.version }}.tar.gz + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/scorecard.yaml b/.github/workflows/scorecard.yaml index 8be962c18b..4d2d571f31 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@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 + uses: github/codeql-action/upload-sarif@68bde559dea0fdcac2102bfdf6230c5f70eb485e # v4.35.4 with: sarif_file: results.sarif diff --git a/.github/workflows/translations.yaml b/.github/workflows/translations.yaml index ac25e3c5bb..d619040b90 100644 --- a/.github/workflows/translations.yaml +++ b/.github/workflows/translations.yaml @@ -7,7 +7,7 @@ on: env: python_version: 3.11 - node_version: 20 + node_version: 24 permissions: contents: read @@ -56,7 +56,7 @@ jobs: echo "Resetting to HEAD~" git reset HEAD~ || true - name: crowdin action - uses: crowdin/github-action@7ca9c452bfe9197d3bb7fa83a4d7e2b0c9ae835d # pin@v2 + uses: crowdin/github-action@8868a33591d21088edfc398968173a3b98d51706 # pin@v2 with: upload_sources: true upload_translations: false diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index afdd0795d1..b140056f45 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -18,7 +18,7 @@ repos: exclude: mkdocs.yml - id: mixed-line-ending - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.15.1 + rev: v0.15.12 hooks: - id: ruff-format args: [--preview] @@ -29,7 +29,7 @@ repos: --preview ] - repo: https://github.com/astral-sh/uv-pre-commit - rev: 0.10.2 + rev: 0.11.12 hooks: - id: pip-compile name: pip-compile requirements-dev.in @@ -48,15 +48,15 @@ repos: args: [src/backend/requirements.in, -o, src/backend/requirements-3.14.txt, --python-version=3.14, -c, src/backend/requirements.txt] files: src/backend/requirements\.(in|txt)$ - id: pip-compile - name: pip-compile requirements.txt + name: pip-compile contrib/dev_reqs/requirements.txt args: [contrib/dev_reqs/requirements.in, -o, contrib/dev_reqs/requirements.txt, -c, src/backend/requirements.txt] files: contrib/dev_reqs/requirements\.(in|txt)$ - id: pip-compile - name: pip-compile requirements.txt + name: pip-compile docs/requirements.txt args: [docs/requirements.in, -o, docs/requirements.txt, -c, src/backend/requirements.txt] files: docs/requirements\.(in|txt)$ - id: pip-compile - name: pip-compile requirements.txt + name: pip-compile contrib/container/requirements.txt args: [contrib/container/requirements.in, -o, contrib/container/requirements.txt, --python-version=3.14, -c, src/backend/requirements.txt] files: contrib/container/requirements\.(in|txt)$ - repo: https://github.com/Riverside-Healthcare/djLint @@ -64,7 +64,7 @@ repos: hooks: - id: djlint-django - repo: https://github.com/codespell-project/codespell - rev: v2.4.1 + rev: v2.4.2 hooks: - id: codespell additional_dependencies: @@ -79,13 +79,13 @@ repos: src/frontend/vite.config.ts | )$ - repo: https://github.com/biomejs/pre-commit - rev: v2.3.15 + rev: v2.4.14 hooks: - id: biome-check additional_dependencies: ["@biomejs/biome@1.9.4"] files: ^src/frontend/.*\.(js|ts|tsx)$ - repo: https://github.com/gitleaks/gitleaks - rev: v8.30.0 + rev: v8.30.1 hooks: - id: gitleaks language_version: 1.25.4 diff --git a/CHANGELOG.md b/CHANGELOG.md index 6988a362c5..c035158ae0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,13 +9,22 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Breaking Changes +- [#9604](https://github.com/inventree/InvenTree/pull/9604) - refactors user API endpoint to be less ambiguous +- [#11893](https://github.com/inventree/InvenTree/pull/11893) bumps Node environment to version 24 LTS - this is only relevant if you build the frontend assets yourself + ### Added +- [#11920](https://github.com/inventree/InvenTree/pull/11920) adds support for renaming attachments after they have been uploaded. This includes both backend and frontend changes, allowing users to rename attachments via the API or through the UI. +- [#11914](https://github.com/inventree/InvenTree/pull/11914) adds a "maximum_stock" field to the Part model, allowing users to specify a maximum preferred stock level for each part. This is used in conjunction with the existing "minimum_stock" field to allow users to define a preferred stock range for each part. The "high_stock" filter has also been added to the Part API endpoint, allowing users to filter parts which are above their maximum stock level. +- [#11631](https://github.com/inventree/InvenTree/pull/11631) adds "raw_amount" field to the BomItem model, allowing BOM quantities to account for the units of measure of the underlying part. +- [#11872](https://github.com/inventree/InvenTree/pull/11872) adds a global setting to allow or disallow the deletion of serialized stock items. +- [#11861](https://github.com/inventree/InvenTree/pull/11861) adds support for bulk-replacing a component in multiple BOMs simultaneously - [#11853](https://github.com/inventree/InvenTree/pull/11853) adds BOM comparison functionality, allowing users to compare the BOM of one assembly with another assembly. - [#11809](https://github.com/inventree/InvenTree/pull/11809) adds multi-level subassembly display mode to the BOM table, allowing users to view multiple levels of subassemblies in a single table view. This is an optional display mode which can be toggled on or off by the user. - [#11778](https://github.com/inventree/InvenTree/pull/11778) adds inline supplier part creation to po line item addition dialog. - [#11772](https://github.com/inventree/InvenTree/pull/11772) the UI now warns if you navigate away from a note panel with unsaved changes - [#11788](https://github.com/inventree/InvenTree/pull/11788) adds support for custom permissions checks on database models defined in plugins. If a model defines a `check_user_permission` classmethod, this will be called to determine if a user has permission to view the model. This is required for plugin models which do not have the required ruleset definitions for the standard permission system. +- [#9570](https://github.com/inventree/InvenTree/pull/9570) adds support for defining primary actions via plugins ### Changed @@ -24,6 +33,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Removed +- [#11962](https://github.com/inventree/InvenTree/pull/11962) removes the "remote_image" field from the Part API endpoint, which (previously) allowed the user to specify a remote URL for an image to be downloaded and associated with the part. This field was removed due to security concerns around downloading images from arbitrary URLs. If you were using this field in an external client application, you will need to update your application to use the new "download_image_from_url" API endpoint instead. + ## 1.3.0 - 2026-04-11 ### Breaking Changes diff --git a/README.md b/README.md index 792e6e267c..7803cf8ec5 100644 --- a/README.md +++ b/README.md @@ -77,6 +77,7 @@ InvenTree is designed to be **extensible**, and provides multiple options for ** diff --git a/codecov.yml b/codecov.yml index b06601b57b..b49179c3ed 100644 --- a/codecov.yml +++ b/codecov.yml @@ -1,3 +1,6 @@ +ignore: + - "src/backend/InvenTree/**/test_migrations.py" + coverage: status: project: diff --git a/contrib/container/requirements.txt b/contrib/container/requirements.txt index bd0064b7d8..6e0559a9c2 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.13 \ - --hash=sha256:5788fce61da23788a8ce6f02583765ab060d396720924789f97fa42119d37f7a \ - --hash=sha256:a31589db5188d074c63f0945c3888fad104627dfcc236fb2b97f71f89da33bc4 +django==5.2.14 \ + --hash=sha256:58a63ba841662e5c686b57ba1fec52ddd68c0b93bd96ac3029d55728f00bf8a2 \ + --hash=sha256:6f712143bd3064310d1f50fac859c3e9a274bdcfc9595339853be7779297fc76 # via # -c src/backend/requirements.txt # -r contrib/container/requirements.in @@ -53,9 +53,9 @@ mysqlclient==2.2.8 \ --hash=sha256:9bed7c8d3b629bdc09e17fb628d5b3b0a5fd1f12b09432b464b9126c727bedc0 \ --hash=sha256:a81f5e12f8d05439709cb02fba97f9f76d1a6c528164f2260d8798fec969e300 # via -r contrib/container/requirements.in -packaging==26.1 \ - --hash=sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f \ - --hash=sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de +packaging==26.2 \ + --hash=sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e \ + --hash=sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661 # via # -c src/backend/requirements.txt # gunicorn @@ -257,7 +257,7 @@ uv==0.11.7 \ --hash=sha256:f97e9f4e4d44fb5c4dfaa05e858ef3414a96416a2e4af270ecd88a3e5fb049a9 \ --hash=sha256:fab0bb43fbbc0ee5b5fee212078d2300c371b725faff7cf72eeaafa0bff0606b # via -r contrib/container/requirements.in -wheel==0.46.3 \ - --hash=sha256:4b399d56c9d9338230118d705d9737a2a468ccca63d5e813e2a4fc7815d8bc4d \ - --hash=sha256:e3e79874b07d776c40bd6033f8ddf76a7dad46a7b8aa1b2787a83083519a1803 +wheel==0.47.0 \ + --hash=sha256:212281cab4dff978f6cedd499cd893e1f620791ca6ff7107cf270781e587eced \ + --hash=sha256:cc72bd1009ba0cf63922e28f94d9d83b920aa2bb28f798a31d0691b02fa3c9b3 # via -r contrib/container/requirements.in diff --git a/contrib/dev_reqs/requirements.txt b/contrib/dev_reqs/requirements.txt index 526af24a49..0591b6d8a6 100644 --- a/contrib/dev_reqs/requirements.txt +++ b/contrib/dev_reqs/requirements.txt @@ -1,8 +1,8 @@ # This file was autogenerated by uv via the following command: # uv pip compile contrib/dev_reqs/requirements.in -o contrib/dev_reqs/requirements.txt -c src/backend/requirements.txt -certifi==2026.2.25 \ - --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ - --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 +certifi==2026.4.22 \ + --hash=sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a \ + --hash=sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580 # via # -c src/backend/requirements.txt # requests @@ -139,9 +139,9 @@ charset-normalizer==3.4.7 \ # via # -c src/backend/requirements.txt # requests -idna==3.11 \ - --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ - --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc # via # -c src/backend/requirements.txt # requests @@ -240,9 +240,9 @@ ruamel-yaml==0.19.1 \ --hash=sha256:27592957fedf6e0b62f281e96effd28043345e0e66001f97683aa9a40c667c93 \ --hash=sha256:53eb66cd27849eff968ebf8f0bf61f46cdac2da1d1f3576dd4ccee9b25c31993 # via jc -urllib3==2.6.3 \ - --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ - --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 +urllib3==2.7.0 \ + --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ + --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 # via # -c src/backend/requirements.txt # requests diff --git a/docs/docs/api/index.md b/docs/docs/api/index.md index 58c21fa947..256eddd9cf 100644 --- a/docs/docs/api/index.md +++ b/docs/docs/api/index.md @@ -54,7 +54,7 @@ Each user is assigned an authentication token which can be used to access the AP If a user does not know their access token, it can be requested via the API interface itself, using a basic authentication request. -To obtain a valid token, perform a GET request to `/api/user/token/`. No data are required, but a valid username / password combination must be supplied in the authentication headers. +To obtain a valid token, perform a GET request to `/api/user/me/token/`. No data are required, but a valid username / password combination must be supplied in the authentication headers. !!! info "Credentials" Ensure that a valid username:password combination are supplied as basic authorization headers. @@ -146,7 +146,7 @@ r:delete:stock Users can only perform REST API actions which align with their assigned [role permissions](../settings/permissions.md#roles). Once a user has *authenticated* via the API, a list of the available roles can be retrieved from: -`/api/user/roles/` +`/api/user/me/roles/` For example, when accessing the API from a *superuser* account: diff --git a/docs/docs/api/schema.md b/docs/docs/api/schema.md index ba610a0773..49c88f3a46 100644 --- a/docs/docs/api/schema.md +++ b/docs/docs/api/schema.md @@ -7,7 +7,7 @@ The API schema as documented below is generated using the [drf-spectactular](htt ## API Version -This documentation is for API version: `449` +This documentation is for API version: `459` !!! tip "API Schema History" We track API schema changes, and provide a snapshot of each API schema version in the [API schema repository](https://github.com/inventree/schema/). diff --git a/docs/docs/assets/images/build/replace_component.png b/docs/docs/assets/images/build/replace_component.png new file mode 100644 index 0000000000..bdf0cf6852 Binary files /dev/null and b/docs/docs/assets/images/build/replace_component.png differ diff --git a/docs/docs/assets/images/stock/transfer_order_calendar.png b/docs/docs/assets/images/stock/transfer_order_calendar.png new file mode 100644 index 0000000000..b04ccb30a5 Binary files /dev/null and b/docs/docs/assets/images/stock/transfer_order_calendar.png differ diff --git a/docs/docs/assets/images/stock/transfer_order_display.png b/docs/docs/assets/images/stock/transfer_order_display.png new file mode 100644 index 0000000000..c1e0bcb335 Binary files /dev/null and b/docs/docs/assets/images/stock/transfer_order_display.png differ diff --git a/docs/docs/assets/images/stock/transfer_order_list.png b/docs/docs/assets/images/stock/transfer_order_list.png new file mode 100644 index 0000000000..b371ac350a Binary files /dev/null and b/docs/docs/assets/images/stock/transfer_order_list.png differ diff --git a/docs/docs/concepts/attachments.md b/docs/docs/concepts/attachments.md index 7fcdde8238..b376cace6d 100644 --- a/docs/docs/concepts/attachments.md +++ b/docs/docs/concepts/attachments.md @@ -16,3 +16,36 @@ Parameters can be associated with various InvenTree models. Any model which supports attachments will have an "Attachments" tab on its detail page. This tab displays all attachments associated with that object: {{ image("concepts/attachments-tab.png", "Order Attachments Example") }} + +## Attachments Types + +The following types of attachments are supported: + +### File Attachments + +File attachments allow users to upload files directly to InvenTree. These files are stored on the server and can be downloaded or viewed by users with appropriate permissions. + +### Image Thumbnails + +When a file attachment is uploaded, InvenTree automatically determines whether the file is a valid image. If it is, a thumbnail is generated and stored alongside the attachment. + +- The thumbnail is created with a reduced image size, while preserving the original aspect ratio. +- Thumbnail generation is performed in the background after upload. +- The `is_image` flag on the attachment record is set to `True` for valid images, and `False` for all other file types. +- If the uploaded file has an image extension but contains invalid or corrupt image data, no thumbnail is generated and `is_image` remains `False`. +- Link attachments (external URLs) are never assigned a thumbnail. + +!!! info "Supported Formats" + Any image format recognised by the [Pillow](https://pillow.readthedocs.io/) library (e.g. PNG, JPEG, GIF, BMP, WEBP) will be treated as a valid image and have a thumbnail generated automatically. + +### Link Attachments + +Link attachments allow users to associate external URLs with an object. This can be useful for linking to external documentation, resources, or other relevant web content. + +## Adding Attachments + +To add an attachment to an object, navigate to the object's detail page and click on the "Attachments" tab. From there, you can click the "Add attachment" button to upload a file or the "Add external link" button to add a link. + +### Renaming Attachments + +Once a file attachment has been uploaded, it can be renamed by clicking the "Edit" action associated with the attachment. This allows you to change the filename without needing to re-upload the file. The system will handle renaming the file on the server and updating the database record accordingly. diff --git a/docs/docs/concepts/custom_states.md b/docs/docs/concepts/custom_states.md index aab4e37ea0..1244939507 100644 --- a/docs/docs/concepts/custom_states.md +++ b/docs/docs/concepts/custom_states.md @@ -17,3 +17,4 @@ Custom states can be defined for the following models: - [Purchase Order](../purchasing/purchase_order.md) - [Sales Order](../sales/sales_order.md) - [Return Order](../sales/return_order.md) +- [Transfer Order](../stock/transfer_order.md) diff --git a/docs/docs/develop/contributing.md b/docs/docs/develop/contributing.md index 7918bd9572..d2b2d2abe6 100644 --- a/docs/docs/develop/contributing.md +++ b/docs/docs/develop/contributing.md @@ -162,7 +162,7 @@ The core software modules are targeting the following versions: | Python | {{ config.extra.min_python_version }} | Minimum required version | | Invoke | {{ config.extra.min_invoke_version }} | Minimum required version | | Django | {{ config.extra.django_version }} | Pinned version | -| Node | 20 | Only needed for frontend development | +| Node | 24 | Only needed for frontend development | Any other software dependencies are handled by the project package config. diff --git a/docs/docs/manufacturing/bom.md b/docs/docs/manufacturing/bom.md index 87093f704e..ebd29053b3 100644 --- a/docs/docs/manufacturing/bom.md +++ b/docs/docs/manufacturing/bom.md @@ -18,7 +18,8 @@ A BOM for a particular assembly is comprised of a number (zero or more) of BOM " | --- | --- | | Part | A reference to another *Part* object which is required to build this assembly | | Reference | Optional reference field to describe the BOM Line Item, e.g. part designator | -| Quantity | The quantity of *Part* required for the assembly | +| Raw Amount | The raw quantity of the part required for the assembly, which can be expressed in different units of measure, e.g. `2 cm`, `1/2 inch`, `200 kg`. | +| Quantity | The quantity of *Part* required for the assembly - this value is automatically calculated from the "raw amount" field, taking into account the units of measure associated with the underlying part. | | Attrition | Estimated attrition losses for a production run. Expressed as a percentage of the base quantity (e.g. 2%) | | Setup Quantity | An additional quantity of the part which is required to account for fixed setup losses during the production process. This is added to the base quantity of the BOM line item | | Rounding Multiple | A value which indicates that the required quantity should be rounded up to the nearest multiple of this value. | @@ -27,6 +28,18 @@ A BOM for a particular assembly is comprised of a number (zero or more) of BOM " | Optional | A boolean field which indicates if this BOM Line Item is "optional" | | Note | Optional note field for additional information +### Units of Measure + +The `raw_amount` field allows the user to specify the required quantity of a particular part in different [units of measure](../concepts/units.md). The units of measure are determined by the underlying part definition. For example, if the part is defined with a default unit of measure of "kg", the user can specify the required quantity in "g", "mg", "lb", etc. + +The `raw_amount` field is stored as a string, and the `quantity` field is automatically calculated from the `raw_amount` field, taking into account the units of measure associated with the underlying part. This allows for greater flexibility in specifying the required quantity of a particular part, while still maintaining accurate tracking of inventory and production requirements. + +If the underlying part does not have a defined unit of measure, the `raw_amount` field is not allowed to have any units of measure specified, and the `quantity` field is simply a numeric representation of the `raw_amount` field. + +### Fractional Representation + +The `raw_amount` field also allows for fractional representation of the required quantity. For example, if the required quantity is 0.5 kg, the user can specify this as `500 g`, `0.5 kg`, `1/2 kg`, etc. The `quantity` field will be automatically calculated as 0.5 kg, regardless of the specific representation used in the `raw_amount` field. + ### Consumable BOM Line Items If a BOM line item is marked as *consumable*, this means that while the part and quantity information is tracked in the BOM, this line item does not get allocated to a [Build Order](./build.md). This may be useful for certain items that the user does not wish to track through the build process, as they may be low value, in abundant stock, or otherwise complicated to track. @@ -192,3 +205,17 @@ When comparing BOMs from two different assemblies, the user can select from the | *Show common parts* | Display only the BOM line items which are common between the two assemblies. | In each case, any differences between the BOM line items are highlighted in red. + +## Replacing Components + +When a component is used in the BOM for multiple assemblies, it can be time consuming to update the BOM for each assembly when a change is required. InvenTree provides a "Replace Component" function which streamlines the process of replacing a component part with another part across multiple BOMs. + +To replace a component part within multiple assemblies: + +- Navigate to the [Used In](../part/views.md#used-in) tab of the component part detail page +- Select the assemblies you wish to update by ticking the checkbox next to each assembly +- Click on the {{ icon("replace", color="blue", title="Replace Component") }} icon to open the "Replace Component" dialog + +The following dialog will be displayed, which allows the user to select a new component part to replace the existing component part in the BOM of the selected assemblies: + +{{ image("build/replace_component.png", "Replace Component") }} diff --git a/docs/docs/manufacturing/build.md b/docs/docs/manufacturing/build.md index 3a8b5b8fc8..496e2c1dde 100644 --- a/docs/docs/manufacturing/build.md +++ b/docs/docs/manufacturing/build.md @@ -304,10 +304,11 @@ The following [global settings](../settings/global.md) are available for adjusti | Name | Description | Default | Units | | ---- | ----------- | ------- | ----- | {{ globalsetting("BUILDORDER_REFERENCE_PATTERN") }} -{{ globalsetting("BUILDORDER_EXTERNAL_BUILDS") }} {{ globalsetting("BUILDORDER_REQUIRE_RESPONSIBLE") }} {{ globalsetting("BUILDORDER_REQUIRE_ACTIVE_PART") }} {{ globalsetting("BUILDORDER_REQUIRE_LOCKED_PART") }} {{ globalsetting("BUILDORDER_REQUIRE_VALID_BOM") }} {{ globalsetting("BUILDORDER_REQUIRE_CLOSED_CHILDS") }} {{ globalsetting("PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS") }} +{{ globalsetting("BUILDORDER_EXTERNAL_BUILDS") }} +{{ globalsetting("BUILDORDER_EXTERNAL_REQUIRED") }} diff --git a/docs/docs/part/index.md b/docs/docs/part/index.md index 076da58b25..dc250131bf 100644 --- a/docs/docs/part/index.md +++ b/docs/docs/part/index.md @@ -6,6 +6,18 @@ title: Parts The *Part* is the core element of the InvenTree ecosystem. A Part object is the archetype of any stock item in your inventory. Parts are arranged in hierarchical categories which are used to organize and filter parts by function. +## Part Stock + +Each part can have multiple [stock items](../stock/index.md) associated with it, which represent the physical quantity of that part in various locations. The total stock level for a given part is the sum of all stock items associated with that part. + +### Minimum Stock + +A part may have a specified "minimum stock" level. This is a user-defined value which indicates the minimum quantity of that part which should be kept in stock at all times. If the total stock level for a given part falls below the minimum stock level, the part is flagged as "low stock" and can be easily identified in the interface. + +### Maximum Stock + +A part may also have a specified "maximum stock" level. This is a user-defined value which indicates the maximum quantity of that part which should be kept in stock at all times. If the total stock level for a given part exceeds the maximum stock level, the part is flagged as "overstocked" and can be easily identified in the interface. + ## Part Category Part categories are very flexible and can be easily arranged to match a particular user requirement. Each part category displays a list of all parts *under* that given category. This means that any part belonging to a particular category, or belonging to a sub-category, will be displayed. @@ -27,7 +39,7 @@ Clicking on the part name links to the [*Part Detail*](./views.md) view. ## Part Attributes -Each *Part* defined in the database provides a number of different attributes which determine how that part can be used. Configuring these attributes for a given part will impact the available functions that can be perform on (or using) that part). +Each *Part* defined in the database provides a number of different attributes which determine how that part can be used. Configuring these attributes for a given part will impact the available functions that can be perform on (or using) that part. ### Virtual @@ -75,6 +87,7 @@ A [Purchase Order](../purchasing/purchase_order.md) allows parts to be ordered f If a part is designated as *Salable* it can be sold to external customers. Setting this flag allows parts to be added to sales orders. + ## Locked Parts Parts can be locked to prevent them from being modified. This is useful for parts which are in production and should not be changed. The following restrictions apply to parts which are locked: diff --git a/docs/docs/plugins/develop.md b/docs/docs/plugins/develop.md index 0522f4ea34..fb6bfbec57 100644 --- a/docs/docs/plugins/develop.md +++ b/docs/docs/plugins/develop.md @@ -41,7 +41,7 @@ If you want to make your life easier, try to follow these guidelines; break wher from plugin import InvenTreePlugin, registry from plugin.mixins import APICallMixin, SettingsMixin, ScheduleMixin, BarcodeMixin ``` -- Feliver as a package (see [below](#packaging)) +- Deliver as a package (see [below](#packaging)) - If you need to use a private infrastructure, use the 'Releases' functions in GitHub or Gitlab. Point to the 'latest' release endpoint when installing to make sure the update function works - Tag your GitHub repo with `inventree` and `inventreeplugins` to make discovery easier. A discovery mechanism using these tags is on the roadmap. - Use GitHub actions to test your plugin regularly (you can [schedule actions](https://docs.github.com/en/actions/learn-github-actions/events-that-trigger-workflows#schedule)) against the 'latest' [docker-build](https://hub.docker.com/r/inventree/inventree) of InvenTree diff --git a/docs/docs/plugins/mixins/ui.md b/docs/docs/plugins/mixins/ui.md index 90329832c2..dc3785d778 100644 --- a/docs/docs/plugins/mixins/ui.md +++ b/docs/docs/plugins/mixins/ui.md @@ -183,6 +183,20 @@ The `get_ui_template_previews` feature type can be used to provide custom templa summary: False members: [] +### Primary Actions + +The `get_ui_primary_actions` method can be used to provide custom primary action, which are rendered in the header of the page, next to the title/name and any status indicators. These primary actions are typically used to provide quick access to common actions related to the current page. + +::: plugin.base.ui.mixins.UserInterfaceMixin.get_ui_primary_actions + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + extra: + show_source: True + summary: False + members: [] + ## Plugin Context When rendering certain content in the user interface, the rendering functions are passed a `context` object which contains information about the current page being rendered. The type of the `context` object is defined in the `PluginContext` file: diff --git a/docs/docs/sales/sales_order.md b/docs/docs/sales/sales_order.md index ebdf3d2e69..d1c8a790ff 100644 --- a/docs/docs/sales/sales_order.md +++ b/docs/docs/sales/sales_order.md @@ -234,3 +234,4 @@ The following [global settings](../settings/global.md) are available for sales o {{ globalsetting("SALESORDER_EDIT_COMPLETED_ORDERS") }} {{ globalsetting("SALESORDER_SHIP_COMPLETE") }} {{ globalsetting("SALESORDER_SHIPMENT_REQUIRES_CHECK") }} +{{ globalsetting("SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS")}} diff --git a/docs/docs/settings/global.md b/docs/docs/settings/global.md index c729c61bb4..4ae4d02f40 100644 --- a/docs/docs/settings/global.md +++ b/docs/docs/settings/global.md @@ -32,11 +32,15 @@ Configuration of basic server settings: {{ globalsetting("INVENTREE_RESTRICT_ABOUT") }} {{ globalsetting("DISPLAY_FULL_NAMES") }} {{ globalsetting("DISPLAY_PROFILE_INFO") }} -{{ globalsetting("INVENTREE_UPDATE_CHECK_INTERVAL") }} -{{ globalsetting("INVENTREE_DOWNLOAD_FROM_URL") }} -{{ globalsetting("INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE") }} -{{ globalsetting("INVENTREE_DOWNLOAD_FROM_URL_USER_AGENT") }} +{{ globalsetting("WEEK_STARTS_ON") }} +{{ globalsetting("INVENTREE_UPLOAD_MAX_SIZE") }} {{ globalsetting("INVENTREE_STRICT_URLS") }} + +Configuration of various scheduled tasks: + +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("INVENTREE_UPDATE_CHECK_INTERVAL") }} {{ globalsetting("INVENTREE_BACKUP_ENABLE") }} {{ globalsetting("INVENTREE_BACKUP_DAYS") }} {{ globalsetting("INVENTREE_DELETE_TASKS_DAYS") }} @@ -206,6 +210,8 @@ Configuration of stock item options | Name | Description | Default | Units | | ---- | ----------- | ------- | ----- | {{ globalsetting("SERIAL_NUMBER_GLOBALLY_UNIQUE") }} +{{ globalsetting("STOCK_ALLOW_EDIT_SERIAL") }} +{{ globalsetting("STOCK_ALLOW_DELETE_SERIALIZED") }} {{ globalsetting("STOCK_DELETE_DEPLETED_DEFAULT") }} {{ globalsetting("STOCK_BATCH_CODE_TEMPLATE") }} {{ globalsetting("STOCK_ENABLE_EXPIRY") }} @@ -235,6 +241,10 @@ Refer to the [sales order settings](../sales/sales_order.md#sales-order-settings Refer to the [return order settings](../sales/return_order.md#return-order-settings). +### Transfer Orders + +Refer to the [transfer order settings](../stock/transfer_order.md#transfer-order-settings). + ### Plugin Settings | Name | Description | Default | Units | diff --git a/docs/docs/settings/user.md b/docs/docs/settings/user.md index bd862cd695..fc8a1664cb 100644 --- a/docs/docs/settings/user.md +++ b/docs/docs/settings/user.md @@ -30,6 +30,7 @@ The *Display Settings* screen shows general display configuration options: {{ usersetting("SHOW_BOM_SUBASSEMBLY_LEVELS")}} {{ usersetting("ENABLE_LAST_BREADCRUMB") }} {{ usersetting("SHOW_FULL_LOCATION_IN_TABLES") }} +{{ usersetting("DISPLAY_ITEMS_FINAL_LEVEL") }} ### Search Settings diff --git a/docs/docs/stock/traceability.md b/docs/docs/stock/traceability.md index 5fb21aa608..666cc84de1 100644 --- a/docs/docs/stock/traceability.md +++ b/docs/docs/stock/traceability.md @@ -142,6 +142,8 @@ Note that any serial number adjustments are subject to the same validation rules {{ image("stock/serial_edit_error.png", title="Error while editing a serial number") }} +!!! info "Disable Serial Number Editing" + If you wish to prevent users from editing serial numbers, this can be achieved by disabling the `Allow Edit Serial Number` setting in the system settings view. #### Plugin Support diff --git a/docs/docs/stock/transfer_order.md b/docs/docs/stock/transfer_order.md new file mode 100644 index 0000000000..12381255e5 --- /dev/null +++ b/docs/docs/stock/transfer_order.md @@ -0,0 +1,150 @@ + +--- +title: Transfer Orders +--- + +## Transfer Orders + +Transfer orders provide a method for requesting stock to be moved from one location to another. It does not replace the existing on-demand stock transaction options, but lets you "document" many transactions from a single view. + +### View Transfer Orders + +To navigate to the Transfer Order display, select *Stock* from the main navigation menu, and *Transfer Orders* from the sidebar: + +{{ image("stock/transfer_order_display.png", "Transfer Order display") }} + +The following view modes are available: + +#### Table View + +*Table View* provides a list of Transfer Orders, which can be filtered to display a subset of orders according to user supplied parameters. + +{{ image("stock/transfer_order_list.png", "Transfer Order list") }} + +#### Calendar View + +*Calendar View* shows a calendar display with outstanding transfer orders. + +{{ image("stock/transfer_order_calendar.png", "Transfer Order calendar") }} + +### Transfer Order Status Codes + +Each Transfer Order has a specific status code, which represents the state of the order: + +| Status | Description | +| --- | --- | +| Pending | The transfer order has been created, but has not been finalized or submitted | +| Issued | The transfer order has been issued, and is in progress | +| On Hold | The transfer order has been placed on hold, but is still active | +| Complete | The transfer order is fully completed, and is now closed | +| Cancelled | The transfer order was cancelled, and is now closed | + +**Source Code** + +Refer to the source code for the Transfer Order status codes: + +::: order.status_codes.TransferOrderStatus + options: + show_bases: False + show_root_heading: False + show_root_toc_entry: False + show_source: True + members: [] + +Transfer Order Status supports [custom states](../concepts/custom_states.md). + +### Transfer Order Parameters + +The following parameters are available for each Transfer Order, and can be edited by the user: + +| Parameter | Description | +| --- | --- | +| Reference | Transfer Order reference e.g. '001' | +| Description | Description of the Transfer Order | +| Project Code | Project Code of the Transfer Order | +| Source Location | Stock location to source stock items from (blank = all locations) | +| Destination Location | Stock location where the stock will be transferred | +| Consume Stock | Rather than transfer the stock to the destination, "consume" it by removing the specified quantity from the allocated stock item +| Start Date | The scheduled start date for the transfer | +| Target Date | Target date for transfer completion | +| External Link | Link to external webpage | +| Responsible | User (or group of users) who is responsible for the transfer | +| Notes | Transfer notes, supports markdown | + +## Create a Transfer Order + +Once the transfer order page is loaded, click on {{ icon("plus-circle") }} New Transfer Order which opens the "Create Transfer Order" form. + +Fill out the rest of the form with the transfer order information then click on Submit to create the order. + +### Transfer Order Reference + +Each Transfer Order is uniquely identified by its *Reference* field. Read more about [reference fields](../settings/reference.md). + +### Add Line Items + +On the transfer order detail page, user can link parts to the transfer order selecting the {{ icon("list") }} Line Items tab then clicking on the {{ icon("plus-circle") }} Add Line Item button. + +Once the "Add Line Item" form opens, select a part in the list. + +!!! warning + Only parts that have the "Virtual" attribute disabled will be shown and can be selected. + +Fill out the rest of the form then click on Submit + +### Allocate Stock Items + +After line items were created, user can either: + +* Allocate stock items for that part to the transfer order (click on {{ icon("arrow-right") }} button) +* Create a build order for that part to cover the quantity of the transfer order (click on {{ icon("tools") }} button) + +### Complete Order + +Once all items in the transfer order have been allocated, click on {{ icon("circle-check", color="green") }} Complete Order to mark the transfer order as complete. Confirm then click on Submit to complete the order. + +### Transferred Stock + +After completing the transfer order, a {{ icon("list") }} Transferred Stock tab will appear showing which stock was affected. + +!!! warning + Similar to received stock on purchase orders, this tab will only be accurate while the affected stock items still exist. Furthermore, if the stock item is depleted while using the "consume" parameter, it will not appear here unless "delete on deplete" is turned off for this stock item + +### Cancel Order + +To cancel the order, click on the {{ icon("tools") }} menu button next to the {{ icon("circle-check", color="green") }} Complete Order button, then click on the "{{ icon("tools") }} Cancel Order" menu option. Confirm then click on the Submit to cancel the order. + +## Order Scheduling + +Transfer orders can be scheduled for a future date, to allow for order scheduling. + +### Start Date + +The *Start Date* of the transfer order is the date on which the order is scheduled to be issued, allowing work to begin on the order. + +### Target Date + +The *Target Date* of the transfer order is the date on which the order is scheduled to be completed. + +### Overdue Orders + +If the *Target Date* of the transfer order has passed, the order will be marked as *overdue*. + +## Calendar view + +Using the button to the top right of the list of Transfer Orders, the view can be switched to a calendar view using the button {{ icon("calendar") }}. This view shows orders with a defined target date only. + +This view can be accessed externally as an ICS calendar using a URL like the following: +`http://inventree.example.org/api/order/calendar/transfer-order/calendar.ics` + +By default, completed orders are not exported. These can be included by appending `?include_completed=True` to the URL. + +## Transfer Order Settings + +The following [global settings](../settings/global.md) are available for transfer orders: + +| Name | Description | Default | Units | +| ---- | ----------- | ------- | ----- | +{{ globalsetting("TRANSFERORDER_ENABLED") }} +{{ globalsetting("TRANSFERORDER_REFERENCE_PATTERN") }} +{{ globalsetting("TRANSFERORDER_REQUIRE_RESPONSIBLE") }} diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml index 82bb9cd772..e477632584 100644 --- a/docs/mkdocs.yml +++ b/docs/mkdocs.yml @@ -145,6 +145,7 @@ nav: - Stock Expiry: stock/expiry.md - Stock Ownership: stock/owner.md - Test Results: stock/test.md + - Transfer Orders: stock/transfer_order.md - Manufacturing: - Manufacturing: manufacturing/index.md - Bill of Materials: manufacturing/bom.md diff --git a/docs/requirements.txt b/docs/requirements.txt index bd7e057613..4248102d6e 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -28,9 +28,9 @@ bracex==2.6 \ --hash=sha256:0b0049264e7340b3ec782b5cb99beb325f36c3782a32e36e876452fd49a09952 \ --hash=sha256:98f1347cd77e22ee8d967a30ad4e310b233f7754dbf31ff3fceb76145ba47dc7 # via wcmatch -certifi==2026.2.25 \ - --hash=sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa \ - --hash=sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7 +certifi==2026.4.22 \ + --hash=sha256:3cb2210c8f88ba2318d29b0388d1023c8492ff72ecdde4ebdaddbb13a31b1c4a \ + --hash=sha256:8d455352a37b71bf76a79caa83a3d6c25afee4a385d632127b6afb3963f1c580 # via # -c src/backend/requirements.txt # httpcore @@ -169,9 +169,9 @@ charset-normalizer==3.4.7 \ # via # -c src/backend/requirements.txt # requests -click==8.3.2 \ - --hash=sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5 \ - --hash=sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d +click==8.3.3 \ + --hash=sha256:398329ad4837b2ff7cbe1dd166a4c0f8900c3ca3a218de04466f38f6497f18a2 \ + --hash=sha256:a2bf429bb3033c89fa4936ffb35d5cb471e3719e1f3c8a7c3fff0b8314305613 # via # mkdocs # neoteroi-mkdocs @@ -202,9 +202,9 @@ gitdb==4.0.12 \ --hash=sha256:5ef71f855d191a3326fcfbc0d5da835f26b13fbcba60c32c21091c349ffdb571 \ --hash=sha256:67073e15955400952c6565cc3e707c554a4eea2e428946f7a4c162fab9bd9bcf # via gitpython -gitpython==3.1.47 \ - --hash=sha256:489f590edfd6d20571b2c0e72c6a6ac6915ee8b8cd04572330e3842207a78905 \ - --hash=sha256:dba27f922bd2b42cb54c87a8ab3cb6beb6bf07f3d564e21ac848913a05a8a3cd +gitpython==3.1.50 \ + --hash=sha256:80da2d12504d52e1f998772dc5baf6e553f8d2fcfe1fcc226c9d9a2ee3372dcc \ + --hash=sha256:d352abe2908d07355014abdd21ddf798c2a961469239afec4962e9da884858f9 # via mkdocs-git-revision-date-localized-plugin griffelib==2.0.0 \ --hash=sha256:01284878c966508b6d6f1dbff9b6fa607bc062d8261c5c7253cb285b06422a7f @@ -227,9 +227,9 @@ httpx==0.28.1 \ --hash=sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc \ --hash=sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad # via neoteroi-mkdocs -idna==3.11 \ - --hash=sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea \ - --hash=sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902 +idna==3.15 \ + --hash=sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8 \ + --hash=sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc # via # -c src/backend/requirements.txt # anyio @@ -444,9 +444,9 @@ neoteroi-mkdocs==1.2.0 \ --hash=sha256:58e25cb1b9db093ffa8d12bdb33264bf567cac30fb964b56e0a493efa749ad6e \ --hash=sha256:91b6aa95a4e46c9bb93e00e021d2044cb0c7d80c0b4600434ff8f440d613a0a8 # via -r docs/requirements.in -packaging==26.1 \ - --hash=sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f \ - --hash=sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de +packaging==26.2 \ + --hash=sha256:5fc45236b9446107ff2415ce77c807cee2862cb6fac22b8a73826d0693b0980e \ + --hash=sha256:ff452ff5a3e828ce110190feff1178bb1f2ea2281fa2075aadb987c2fb221661 # via # -c src/backend/requirements.txt # mkdocs @@ -480,9 +480,9 @@ pygments==2.20.0 \ # via # mkdocs-material # rich -pymdown-extensions==10.21.2 \ - --hash=sha256:5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638 \ - --hash=sha256:c3f55a5b8a1d0edf6699e35dcbea71d978d34ff3fa79f3d807b8a5b3fa90fbdc +pymdown-extensions==10.21.3 \ + --hash=sha256:72cfcf55f07aea0d4af2c4f11dd4e52466ddfb1bb819673146398e0bd3a77354 \ + --hash=sha256:d7a5d08014fc571e80ca21dd6f854e31f94c489800350564d55d15b3c41e76b6 # via # mkdocs-material # mkdocs-mermaid2-plugin @@ -631,9 +631,9 @@ typing-extensions==4.15.0 \ # -c src/backend/requirements.txt # anyio # beautifulsoup4 -urllib3==2.6.3 \ - --hash=sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed \ - --hash=sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 +urllib3==2.7.0 \ + --hash=sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c \ + --hash=sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897 # via # -c src/backend/requirements.txt # requests diff --git a/pyproject.toml b/pyproject.toml index 63a0fd5a6e..169e5a1f89 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -120,6 +120,7 @@ possibly-unbound-attribute="ignore" # 21 [tool.coverage.run] source = ["src/backend/InvenTree", "InvenTree"] dynamic_context = "test_function" +omit = ["*/test_migrations.py"] [tool.coverage.html] show_contexts = true diff --git a/src/backend/InvenTree/InvenTree/api_version.py b/src/backend/InvenTree/InvenTree/api_version.py index 4c7c25654e..de8640d308 100644 --- a/src/backend/InvenTree/InvenTree/api_version.py +++ b/src/backend/InvenTree/InvenTree/api_version.py @@ -1,11 +1,48 @@ """InvenTree API version information.""" # InvenTree API version -INVENTREE_API_VERSION = 482 +INVENTREE_API_VERSION = 493 """Increment this API version number whenever there is a significant change to the API that any clients need to know about.""" INVENTREE_API_TEXT = """ +v493 -> 2026-05-18 : https://github.com/inventree/InvenTree/pull/11961 + - Adds "thumbnail" field to the Attachment API endpoint, which provides a URL to a thumbnail image for image attachments (if available) + +v492 -> 2026-05-22 : https://github.com/inventree/InvenTree/pull/11281 + - Add Transfer Order model and associated API endpoint + +v491 -> 2026-05-21 : https://github.com/inventree/InvenTree/pull/11979 + - Add API serializer for deleting a part category + - Add API serializer for deleting a stock location + +v490 -> 2026-05-19 : https://github.com/inventree/InvenTree/pull/11963 + - moves user-self-filtered endpoints to /user/me/ to make their security boundaries clearer + +v489 -> 2026-05-18 : https://github.com/inventree/InvenTree/pull/11962 + - Removes the "remote_image" field from the Part API endpoint + - Removes the "remote_image" field from the Company API endpoint + +v488 -> 2026-05-17 : https://github.com/inventree/InvenTree/pull/11920 + - Allow renaming of attachments after upload via the API + +v487 -> 2026-05-15 : https://github.com/inventree/InvenTree/pull/11948 + - Make SelectionList default nullable + - Add icon to TreePath schema + +v486 -> 2026-05-10 : https://github.com/inventree/InvenTree/pull/11914 + - Adds "maximum_stock" field to the Part model and associated API endpoints + - Adds "high_stock" filter to the Part API endpoint to filter parts which are above their maximum stock level + +v485 -> 2026-05-10 : https://github.com/inventree/InvenTree/pull/11631 + - Adds "raw_amount" field to the BomItem API endpoint + +v484 -> 2026-05-10 : https://github.com/inventree/InvenTree/pull/11910 + - Adds more docstrings to (scheduled) tasks + +v483 -> 2026-05-04 : https://github.com/inventree/InvenTree/pull/11861 + - Enable bulk-update operations on the BomItem API endpoint, allowing multiple BOM items to be updated in a single API call + v482 -> 2026-03-15 : https://github.com/inventree/InvenTree/pull/11540 - Add id to the ordering fields of the Parts model diff --git a/src/backend/InvenTree/InvenTree/conversion.py b/src/backend/InvenTree/InvenTree/conversion.py index aedf416883..8db0eb8330 100644 --- a/src/backend/InvenTree/InvenTree/conversion.py +++ b/src/backend/InvenTree/InvenTree/conversion.py @@ -184,7 +184,7 @@ def from_engineering_notation(value): return value -def convert_value(value, unit): +def convert_value(value, unit=None): """Attempt to convert a value to a specified unit. Arguments: @@ -221,11 +221,11 @@ def convert_physical_value(value: str, unit: Optional[str] = None, strip_units=T unit: Optional unit to convert to, and validate against strip_units: If True, strip units from the returned value, and return only the dimension - Raises: - ValidationError: If the value is invalid or cannot be converted to the specified unit - Returns: The converted quantity, in the specified units + + Raises: + ValidationError: If the value is invalid or cannot be converted to the specified unit """ ureg = get_unit_registry() diff --git a/src/backend/InvenTree/InvenTree/helpers.py b/src/backend/InvenTree/InvenTree/helpers.py index bd358a9fe6..502ac9c3b0 100644 --- a/src/backend/InvenTree/InvenTree/helpers.py +++ b/src/backend/InvenTree/InvenTree/helpers.py @@ -1181,3 +1181,18 @@ def plugins_info(*args, **kwargs): return [ {'name': plg.name, 'slug': plg.slug, 'version': plg.version} for plg in plugins ] + + +def sanitize_token(token_value: str, front=8, back=12) -> str: + """Sanitize a token by replacing the middle characters with asterisks. + + Args: + token_value: The token string to sanitize + front: Number of characters to show at the start of the token (default = 8) + back: Number of characters to show at the end of the token (default = 12) + + Returns: + The sanitized token string + """ + middle = len(token_value) - (front + back) + return token_value[:front] + '*' * middle + token_value[-back:] diff --git a/src/backend/InvenTree/InvenTree/helpers_model.py b/src/backend/InvenTree/InvenTree/helpers_model.py index 455c8e000d..ccd1cfd963 100644 --- a/src/backend/InvenTree/InvenTree/helpers_model.py +++ b/src/backend/InvenTree/InvenTree/helpers_model.py @@ -120,7 +120,12 @@ def validate_url_no_ssrf(url): raise ValueError(_('URL points to a private or reserved IP address')) -def download_image_from_url(remote_url, timeout=2.5): +def download_image_from_url( + remote_url: str, + timeout: float = 2.5, + user_agent: str = '', + max_size: Optional[int] = None, +): """Download an image file from a remote URL. This is a potentially dangerous operation, so we must perform some checks: @@ -130,8 +135,9 @@ def download_image_from_url(remote_url, timeout=2.5): Arguments: remote_url: The remote URL to retrieve image - max_size: Maximum allowed image size (default = 1MB) timeout: Connection timeout in seconds (default = 5) + user_agent: User-Agent string to use for the request (optional) + max_size: Maximum allowed image size (in bytes) (default = 1MB) Returns: An in-memory PIL image file, if the download was successful @@ -151,13 +157,9 @@ def download_image_from_url(remote_url, timeout=2.5): 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 - ) + max_size = max_size or 1 * 1024 * 1024 # Default to 1MB if not provided # Add user specified user-agent to request (if specified) - user_agent = get_global_setting('INVENTREE_DOWNLOAD_FROM_URL_USER_AGENT') - headers = {'User-Agent': user_agent} if user_agent else None try: diff --git a/src/backend/InvenTree/InvenTree/middleware.py b/src/backend/InvenTree/InvenTree/middleware.py index 369d9c29a2..98ffc08c22 100644 --- a/src/backend/InvenTree/InvenTree/middleware.py +++ b/src/backend/InvenTree/InvenTree/middleware.py @@ -10,12 +10,13 @@ from django.http import HttpRequest, HttpResponse, JsonResponse from django.shortcuts import redirect, render from django.urls import resolve, reverse, reverse_lazy from django.utils.deprecation import MiddlewareMixin -from django.utils.http import is_same_domain +from django.utils.http import is_same_domain, url_has_allowed_host_and_scheme from django.utils.translation import gettext_lazy as _ import structlog from error_report.middleware import ExceptionProcessor +import InvenTree.helpers from common.settings import get_global_setting from InvenTree.cache import create_session_cache, delete_session_cache from InvenTree.config import CONFIG_LOOKUPS, inventreeInstaller @@ -126,7 +127,8 @@ class AuthRequiredMiddleware: return True except ApiToken.DoesNotExist: # pragma: no cover logger.warning( - 'Access denied for unknown token %s', token + 'Access denied for unknown token %s', + InvenTree.helpers.sanitize_token(str(token)), ) # pragma: no cover return False @@ -163,9 +165,16 @@ class AuthRequiredMiddleware: if path not in urls and not any( path.startswith(p) for p in paths_ignore_handling ): + # Validate next url is safe to redirect to + next_url = request.path + if not url_has_allowed_host_and_scheme( + url=next_url, + allowed_hosts=settings.ALLOWED_HOSTS, + require_https=request.is_secure(), + ): + return redirect(str(reverse_lazy('account_login'))) # Save the 'next' parameter to pass through to the login view - - return redirect(f'{reverse_lazy("account_login")}?next={request.path}') + return redirect(f'{reverse_lazy("account_login")}?next={next_url}') # Return a 401 (Unauthorized) response code for this request return HttpResponse('Unauthorized', status=401) diff --git a/src/backend/InvenTree/InvenTree/models.py b/src/backend/InvenTree/InvenTree/models.py index f0bb8dc11d..b6f5692c0a 100644 --- a/src/backend/InvenTree/InvenTree/models.py +++ b/src/backend/InvenTree/InvenTree/models.py @@ -594,7 +594,7 @@ class InvenTreeParameterMixin(InvenTreePermissionCheckMixin, models.Model): parameters.append(parameter) if len(parameters) > 0: - common.models.Parameter.objects.bulk_create(parameters) + common.models.Parameter.objects.bulk_create(parameters, batch_size=250) def get_parameter(self, name: str): """Return a Parameter instance for the given parameter name. @@ -661,7 +661,9 @@ class InvenTreeAttachmentMixin(InvenTreePermissionCheckMixin): Before deleting the model instance, delete any associated attachments. """ - self.attachments.all().delete() + for attachment in list(self.attachments.all()): + attachment.delete() + super().delete(*args, **kwargs) @property diff --git a/src/backend/InvenTree/InvenTree/schema.py b/src/backend/InvenTree/InvenTree/schema.py index 93050be7ce..55fa008349 100644 --- a/src/backend/InvenTree/InvenTree/schema.py +++ b/src/backend/InvenTree/InvenTree/schema.py @@ -341,3 +341,24 @@ def schema_for_view_output_options(view_class): view_class ) return extended_view + + +def exclude_from_schema(klass: type, alternative_path: str) -> type: + """Decorator to exclude a view from the OpenAPI schema. + + This is used to hide legacy endpoints from the schema, while still retaining them for backwards compatibility. + """ + + class LegacyView(klass): + """Dummy doc.""" + + LegacyView.__name__ = klass.__name__ + ' - Legacy' + LegacyView.__doc__ = f'This is a legacy endpoint, retained for backwards compatibility. Consider migrating to the new endpoint under {alternative_path}.' + + # Exclude all default operations from the schema + for operation in ['get', 'post', 'put', 'patch', 'delete']: + if hasattr(klass, operation): + LegacyView = extend_schema_view(**{operation: extend_schema(exclude=True)})( + LegacyView + ) + return LegacyView diff --git a/src/backend/InvenTree/InvenTree/serializers.py b/src/backend/InvenTree/InvenTree/serializers.py index b739143b8a..3df76e9e3c 100644 --- a/src/backend/InvenTree/InvenTree/serializers.py +++ b/src/backend/InvenTree/InvenTree/serializers.py @@ -26,7 +26,6 @@ from rest_framework.serializers import DecimalField, Serializer from rest_framework.utils import model_meta from taggit.serializers import TaggitSerializer -import common.models as common_models import InvenTree.ready from common.currency import currency_code_default, currency_code_mappings from InvenTree.fields import InvenTreeRestURLField, InvenTreeURLField @@ -315,13 +314,16 @@ class TreePathSerializer(serializers.Serializer): allowed_fields = ['pk', 'name', *(extra_fields or [])] + if InvenTree.ready.isGeneratingSchema(): + return + for field in list(self.fields.keys()): if field not in allowed_fields: self.fields.pop(field, None) pk = serializers.IntegerField(read_only=True) name = serializers.CharField(read_only=True) - icon = serializers.CharField(required=False, read_only=True) + icon = serializers.CharField(required=False, read_only=True, allow_null=True) class InvenTreeMoneySerializer(MoneyField): @@ -782,51 +784,6 @@ class NotesFieldMixin: self.fields.pop('notes', None) -class RemoteImageMixin(metaclass=serializers.SerializerMetaclass): - """Mixin class which allows downloading an 'image' from a remote URL. - - Adds the optional, write-only `remote_image` field to the serializer - """ - - def skip_create_fields(self): - """Ensure the 'remote_image' field is skipped when creating a new instance.""" - return ['remote_image'] - - remote_image = serializers.URLField( - required=False, - allow_blank=True, - write_only=True, - label=_('Remote Image'), - help_text=_('URL of remote image file'), - ) - - def validate_remote_image(self, url): - """Perform custom validation for the remote image URL. - - - Attempt to download the image and store it against this object instance - - Catches and re-throws any errors - """ - from InvenTree.helpers_model import download_image_from_url - - if not url: - return - - if not common_models.InvenTreeSetting.get_setting( - 'INVENTREE_DOWNLOAD_FROM_URL' - ): - raise ValidationError( - _('Downloading images from remote URL is not enabled') - ) - - try: - self.remote_image_file = download_image_from_url(url) - except Exception: - self.remote_image_file = None - raise ValidationError(_('Failed to download image from remote URL')) - - return url - - class ContentTypeField(serializers.ChoiceField): """Serializer field which represents a ContentType as 'app_label.model_name'. diff --git a/src/backend/InvenTree/InvenTree/setting/db_backend.py b/src/backend/InvenTree/InvenTree/setting/db_backend.py index 03e9f12cff..3cedea07d4 100644 --- a/src/backend/InvenTree/InvenTree/setting/db_backend.py +++ b/src/backend/InvenTree/InvenTree/setting/db_backend.py @@ -19,19 +19,25 @@ def get_db_backend(): 'ENGINE': get_setting( 'INVENTREE_DB_ENGINE', 'database.engine', '', typecast=str ) - or get_config_value('database.ENGINE'), + or get_config_value('database.ENGINE') + or '', 'NAME': get_setting('INVENTREE_DB_NAME', 'database.name', '', typecast=str) - or get_config_value('database.NAME'), + or get_config_value('database.NAME') + or '', 'USER': get_setting('INVENTREE_DB_USER', 'database.user', '', typecast=str) - or get_config_value('database.USER'), + or get_config_value('database.USER') + or '', 'PASSWORD': get_setting( 'INVENTREE_DB_PASSWORD', 'database.password', '', typecast=str ) - or get_config_value('database.PASSWORD'), + or get_config_value('database.PASSWORD') + or '', 'HOST': get_setting('INVENTREE_DB_HOST', 'database.host', '', typecast=str) - or get_config_value('database.HOST'), + or get_config_value('database.HOST') + or '', 'PORT': get_setting('INVENTREE_DB_PORT', 'database.port', '', typecast=str) - or get_config_value('database.PORT'), + or get_config_value('database.PORT') + or '', 'OPTIONS': get_setting( 'INVENTREE_DB_OPTIONS', 'database.options', {}, typecast=dict ) diff --git a/src/backend/InvenTree/InvenTree/tasks.py b/src/backend/InvenTree/InvenTree/tasks.py index dcd1457495..c231bf2197 100644 --- a/src/backend/InvenTree/InvenTree/tasks.py +++ b/src/backend/InvenTree/InvenTree/tasks.py @@ -178,7 +178,7 @@ def check_existing_task(taskname, group: str, *args, **kwargs) -> Optional[str]: # 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: + if task.func() != taskname and task.task.get('func') != taskname: # Task does not match continue @@ -423,12 +423,12 @@ def scheduled_task( minutes (int, optional): The number of minutes between task runs. Defaults to None. tasklist (TaskRegister, optional): The list the tasks should be registered to. Defaults to None. + Returns: + _type_: _description_ + Raises: ValueError: If decorated object is not callable ValueError: If interval is not valid - - Returns: - _type_: _description_ """ def _task_wrapper(admin_class): diff --git a/src/backend/InvenTree/InvenTree/tests.py b/src/backend/InvenTree/InvenTree/tests.py index 5a303d264d..977834b450 100644 --- a/src/backend/InvenTree/InvenTree/tests.py +++ b/src/backend/InvenTree/InvenTree/tests.py @@ -738,21 +738,10 @@ class TestHelpers(TestCase): large_img = 'https://github.com/inventree/InvenTree/raw/master/src/backend/InvenTree/InvenTree/static/img/paper_splash_large.jpg' - InvenTreeSetting.set_setting( - 'INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE', 1, change_user=None - ) - - # Attempt to download an image which is too large - with self.assertRaises(ValueError): - InvenTree.helpers_model.download_image_from_url(large_img, timeout=10) - - # Increase allowable download size - InvenTreeSetting.set_setting( - 'INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE', 5, change_user=None - ) - # Download a valid image (should not throw an error) - InvenTree.helpers_model.download_image_from_url(large_img, timeout=10) + InvenTree.helpers_model.download_image_from_url( + large_img, timeout=10, max_size=10 * 1024 * 1024 + ) def test_model_mixin(self): """Test the getModelsWithMixin function.""" diff --git a/src/backend/InvenTree/InvenTree/version.py b/src/backend/InvenTree/InvenTree/version.py index 84802dfb05..b2b211b791 100644 --- a/src/backend/InvenTree/InvenTree/version.py +++ b/src/backend/InvenTree/InvenTree/version.py @@ -12,8 +12,6 @@ import sys from datetime import datetime as dt from datetime import timedelta as td -from django.conf import settings - from .api_version import INVENTREE_API_TEXT, INVENTREE_API_VERSION # InvenTree software version @@ -39,6 +37,8 @@ try: output = logger.warning try: + from django.conf import settings + if settings.DOCKER: output = logger.info except Exception: diff --git a/src/backend/InvenTree/build/models.py b/src/backend/InvenTree/build/models.py index c908bddd24..9bd92609eb 100644 --- a/src/backend/InvenTree/build/models.py +++ b/src/backend/InvenTree/build/models.py @@ -975,10 +975,10 @@ class Build( allocations.extend(new_allocations) # Bulk create tracking entries - stock.models.StockItemTracking.objects.bulk_create(tracking) + stock.models.StockItemTracking.objects.bulk_create(tracking, batch_size=250) # Generate stock allocations - BuildItem.objects.bulk_create(allocations) + BuildItem.objects.bulk_create(allocations, batch_size=250) else: """Create a single build output of the given quantity.""" @@ -1033,7 +1033,9 @@ class Build( self.deallocate_stock(output=output) # Remove the build output from the database - output.delete() + # This is a special case where serialized stock can be deleted, + # independedent of the global setting which normally prevents deletion of serialized stock items + output.delete(ignore_serial_check=True) @transaction.atomic def trim_allocated_stock(self): @@ -1389,7 +1391,7 @@ class Build( new_items.extend(self.auto_allocate_tracked_output(output, **kwargs)) # Bulk-create the new BuildItem objects - BuildItem.objects.bulk_create(new_items) + BuildItem.objects.bulk_create(new_items, batch_size=250) def auto_allocate_untracked_stock(self, **kwargs): """Automatically allocate untracked stock items against this build order. @@ -1530,7 +1532,7 @@ class Build( break # Bulk-create the new BuildItem objects - BuildItem.objects.bulk_create(new_items) + BuildItem.objects.bulk_create(new_items, batch_size=250) def unallocated_lines(self, tracked: Optional[bool] = None) -> QuerySet: """Returns a list of BuildLine objects which have not been fully allocated.""" @@ -1655,7 +1657,7 @@ class Build( lines.append(BuildLine(build=self, bom_item=bom_item, quantity=quantity)) - BuildLine.objects.bulk_create(lines) + BuildLine.objects.bulk_create(lines, batch_size=250) if len(lines) > 0: logger.info('Created %s BuildLine objects for BuildOrder', len(lines)) diff --git a/src/backend/InvenTree/build/test_api.py b/src/backend/InvenTree/build/test_api.py index b7aa4a9cbd..706332e3fd 100644 --- a/src/backend/InvenTree/build/test_api.py +++ b/src/backend/InvenTree/build/test_api.py @@ -9,6 +9,7 @@ from rest_framework import status from build.models import Build, BuildItem, BuildLine from build.status_codes import BuildStatus +from common.settings import set_global_setting from InvenTree.unit_test import InvenTreeAPITestCase from part.models import BomItem, Part from stock.models import StockItem @@ -1548,6 +1549,44 @@ class BuildOutputScrapTest(BuildAPITest): self.assertFalse(completed_output.is_building) +class BuildOutputCancelTest(BuildAPITest): + """Test cancellation of build outputs.""" + + def test_cancel_output(self): + """Test cancellation of a build output.""" + build = Build.objects.get(pk=1) + build.part.trackable = True + build.part.save() + + N = build.build_outputs.count() + + # Create outputs + outputs = build.create_build_output(2, serials=['101', '202']) + self.assertEqual(outputs.count(), 2) + self.assertEqual(build.build_outputs.count(), N + 2) + + output_ids = list(outputs.values_list('pk', flat=True)) + + # Let's cancel one of the outputs + set_global_setting('STOCK_ALLOW_DELETE_SERIALIZED', True) + url = reverse('api-build-output-delete', kwargs={'pk': build.pk}) + + self.post(url, data={'outputs': [{'output': output_ids[0]}]}, expected_code=201) + + # Prevent deletion of serialized stock items, and try again + # Note that this should still succeed, independent of the global setting + set_global_setting('STOCK_ALLOW_DELETE_SERIALIZED', False) + + self.post(url, data={'outputs': [{'output': output_ids[1]}]}, expected_code=201) + + # The outputs should have been scrapped + self.assertEqual(build.build_outputs.count(), N) + + for pk in output_ids: + self.assertFalse(StockItem.objects.filter(pk=pk).exists()) + self.get(reverse('api-stock-detail', kwargs={'pk': pk}), expected_code=404) + + class BuildLineTests(BuildAPITest): """Unit tests for the BuildLine API endpoints.""" diff --git a/src/backend/InvenTree/build/test_build.py b/src/backend/InvenTree/build/test_build.py index 608bff91b4..bb1007dff2 100644 --- a/src/backend/InvenTree/build/test_build.py +++ b/src/backend/InvenTree/build/test_build.py @@ -932,7 +932,10 @@ class ExternalBuildTest(InvenTreeAPITestCase): def test_validation(self): """Test validation of external build logic.""" part = Part.objects.create( - name='Test part', description='A test part', purchaseable=False + name='Test part', + description='A test part', + assembly=True, + purchaseable=False, ) # Create a build order @@ -949,6 +952,47 @@ class ExternalBuildTest(InvenTreeAPITestCase): str(err.exception.messages), ) + def test_build_requirement(self): + """Test the global 'BUILDORDER_EXTERNAL_REQUIRED' setting.""" + # Create required test data + part = Part.objects.create( + name='Test part', + description='A test part', + assembly=True, + purchaseable=True, + ) + supplier = company.models.Company.objects.create( + name='Test supplier', active=True, is_supplier=True + ) + supplier_part = company.models.SupplierPart.objects.create( + part=part, supplier=supplier, SKU='TEST-123' + ) + + po = PurchaseOrder.objects.create(supplier=supplier, reference='PO-9999') + po_line = PurchaseOrderLineItem.objects.create( + order=po, part=supplier_part, quantity=10 + ) + + set_global_setting('BUILDORDER_EXTERNAL_REQUIRED', False) + po_line.clean() # Should not raise an error + + set_global_setting('BUILDORDER_EXTERNAL_BUILDS', True) + set_global_setting('BUILDORDER_EXTERNAL_REQUIRED', True) + + # Expect failure, there is no linked build order + with self.assertRaises(ValidationError): + po_line.clean() + + # Create and link a build order + build = Build.objects.create( + part=part, title='Test build order', quantity=10, external=True + ) + po_line.build_order = build + po_line.save() + + # Clean step now passes + po_line.clean() + def test_logic(self): """Test external build logic.""" # Create a purchaseable assembly part diff --git a/src/backend/InvenTree/common/api.py b/src/backend/InvenTree/common/api.py index f4d2cd671c..5726b32f91 100644 --- a/src/backend/InvenTree/common/api.py +++ b/src/backend/InvenTree/common/api.py @@ -717,7 +717,17 @@ class AttachmentFilter(FilterSet): """Metaclass options.""" model = common.models.Attachment - fields = ['model_type', 'model_id', 'upload_user'] + fields = ['model_type', 'model_id', 'upload_user', 'is_image'] + + has_thumbnail = rest_filters.BooleanFilter( + label=_('Has Thumbnail'), method='filter_has_thumbnail' + ) + + def filter_has_thumbnail(self, queryset, name, value): + """Filter attachments based on whether they have a thumbnail or not.""" + if value: + return queryset.exclude(thumbnail=None).exclude(thumbnail='') + return queryset.filter(Q(thumbnail=None) | Q(thumbnail='')).distinct() is_link = rest_filters.BooleanFilter(label=_('Is Link'), method='filter_is_link') @@ -781,8 +791,34 @@ class AttachmentList(AttachmentMixin, BulkDeleteMixin, ListCreateAPI): class AttachmentDetail(AttachmentMixin, RetrieveUpdateDestroyAPI): """Detail API endpoint for Attachment objects.""" + def update(self, request, *args, **kwargs): + """Update an existing attachment object.""" + attachment = self.get_object() + + if not attachment.check_permission('change', request.user): + raise PermissionDenied( + _('User does not have permission to edit this attachment') + ) + + partial = kwargs.pop('partial', False) + data = self.clean_data(request.data) + + # Extract filename first + filename = data.pop('filename', None) + + # Run other validation / updates first, before attempting to rename the file + serializer = self.get_serializer(attachment, data=data, partial=partial) + serializer.is_valid(raise_exception=True) + self.perform_update(serializer) + + # User is attempting to rename the file + if filename and attachment.basename and filename != attachment.basename: + attachment.rename(filename) + + return Response(serializer.data) + def destroy(self, request, *args, **kwargs): - """Check user permissions before deleting an attachment.""" + """Delete an existing attachment object.""" attachment = self.get_object() if not attachment.check_permission('delete', request.user): @@ -1145,6 +1181,10 @@ class SelectionListDetail(RetrieveUpdateDestroyAPI): serializer_class = common.serializers.SelectionListSerializer permission_classes = [IsAuthenticatedOrReadScope] + def get_queryset(self): + """Override the queryset method to include entry count.""" + return self.serializer_class.annotate_queryset(super().get_queryset()) + class EntryMixin: """Mixin for SelectionEntry views.""" diff --git a/src/backend/InvenTree/common/migrations/0042_attachment_is_image_attachment_thumbnail.py b/src/backend/InvenTree/common/migrations/0042_attachment_is_image_attachment_thumbnail.py new file mode 100644 index 0000000000..d4bf86df20 --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0042_attachment_is_image_attachment_thumbnail.py @@ -0,0 +1,48 @@ +# Generated by Django 5.2.14 on 2026-05-18 11:34 + +from django.db import migrations, models + +import common.models +import common.validators + + +class Migration(migrations.Migration): + + dependencies = [ + ("common", "0041_auto_20251203_1244"), + ] + + operations = [ + migrations.AddField( + model_name="attachment", + name="thumbnail", + field=models.ImageField( + blank=True, + help_text="Thumbnail image for this attachment", + null=True, + upload_to="", + verbose_name="Thumbnail", + ), + ), + migrations.AddField( + model_name="attachment", + name="is_image", + field=models.BooleanField( + default=False, + help_text="True if this attachment is a valid image file", + verbose_name="Is image", + ), + ), + migrations.AlterField( + model_name="attachment", + name="attachment", + field=models.FileField( + blank=True, + help_text="Select file to attach", + null=True, + upload_to=common.models.rename_attachment, + validators=[common.validators.validate_attachment_file], + verbose_name="Attachment", + ), + ), + ] diff --git a/src/backend/InvenTree/common/migrations/0043_auto_20260518_1206.py b/src/backend/InvenTree/common/migrations/0043_auto_20260518_1206.py new file mode 100644 index 0000000000..597ad45cf7 --- /dev/null +++ b/src/backend/InvenTree/common/migrations/0043_auto_20260518_1206.py @@ -0,0 +1,58 @@ +# Generated by Django 5.2.14 on 2026-05-18 12:06 + +import io +import os + +from PIL import Image +from tqdm import tqdm + +from time import sleep + +from django.db import migrations +from django.core.files.base import ContentFile +from django.core.files.storage import default_storage + + +def update_image_attachments(apps, schema_editor): + """Update existing attachments to ensure that image attachments have thumbnails. + + For each existing attachment, check if it is an image. + If it is, generate a thumbnail for it. + + Note: This function mirrors the logic used in the Attachment model's + check_is_image method, at the time of writing this migration (2026-05-18). + """ + + import common.tasks + + Attachment = apps.get_model('common', 'Attachment') + + # Find all Attachment instances which (potentially) have a file attached + attachments = Attachment.objects.exclude(attachment__isnull=True).exclude(attachment='') + + if attachments.count() == 0: + return + + progress = tqdm(total=attachments.count(), desc='Migration common.0043: Updating attachments') + + for attachment in attachments: + progress.update(1) + + if not attachment.attachment: + continue + + if not attachment.attachment.name or not default_storage.exists(attachment.attachment.name): + continue + + common.tasks.rebuild_attachment(attachment.pk) + + +class Migration(migrations.Migration): + + dependencies = [ + ("common", "0042_attachment_is_image_attachment_thumbnail"), + ] + + operations = [ + migrations.RunPython(update_image_attachments, reverse_code=migrations.RunPython.noop), + ] diff --git a/src/backend/InvenTree/common/models.py b/src/backend/InvenTree/common/models.py index 2cb7e33104..a53d2640b4 100644 --- a/src/backend/InvenTree/common/models.py +++ b/src/backend/InvenTree/common/models.py @@ -15,6 +15,7 @@ from datetime import timedelta, timezone from email.utils import make_msgid from enum import Enum from io import BytesIO +from pathlib import Path from secrets import compare_digest from typing import Any, Optional @@ -25,9 +26,10 @@ from django.contrib.contenttypes.fields import GenericForeignKey from django.contrib.contenttypes.models import ContentType from django.contrib.humanize.templatetags.humanize import naturaltime from django.core.cache import cache -from django.core.exceptions import ValidationError +from django.core.exceptions import SuspiciousFileOperation, ValidationError from django.core.files.base import ContentFile from django.core.files.storage import default_storage +from django.core.files.utils import validate_file_name from django.core.mail import EmailMultiAlternatives, get_connection from django.core.mail.utils import DNS_NAME from django.core.validators import MinLengthValidator, MinValueValidator @@ -46,6 +48,7 @@ from django_q.signals import post_spawn from djmoney.contrib.exchange.exceptions import MissingRate from djmoney.contrib.exchange.models import convert_money from opentelemetry import trace +from PIL import Image from rest_framework.exceptions import PermissionDenied from taggit.managers import TaggableManager @@ -247,11 +250,14 @@ class BaseInvenTreeSetting(models.Model): if len(missing_keys) > 0: logger.info('Building %s default values for %s', len(missing_keys), cls) - cls.objects.bulk_create([ - cls(key=key, value=cls.get_setting_default(key), **kwargs) - for key in missing_keys - if not key.startswith('_') - ]) + cls.objects.bulk_create( + [ + cls(key=key, value=cls.get_setting_default(key), **kwargs) + for key in missing_keys + if not key.startswith('_') + ], + batch_size=250, + ) except Exception as exc: logger.exception( 'Failed to build default values for %s (%s)', cls, type(exc) @@ -1927,6 +1933,8 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel model_id: The ID of the model to which this attachment is linked attachment: The uploaded file url: An external URL + thumbnail: A generated thumbnail for the uploaded file (if applicable) + is_image: True if this attachment is a valid image file comment: A comment or description for the attachment user: The user who uploaded the attachment upload_date: The date the attachment was uploaded @@ -1935,6 +1943,8 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel tags: Tags for the attachment """ + THUMBNAIL_SIZE = 256 + class Meta: """Metaclass options.""" @@ -1945,6 +1955,31 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel choice_fnc = common.validators.attachment_model_options + def delete(self, *args, **kwargs): + """Custom delete method for the Attachment model. + + - Ensure that the attached file is deleted from storage when the database entry is removed + """ + attachment = self.attachment + thumbnail = self.thumbnail + + super().delete(*args, **kwargs) + + # Delete the associated files from storage (if they exist)W + if attachment and default_storage.exists(attachment.name): + try: + # Remove the attached file from storage + default_storage.delete(attachment.name) + except Exception: # pragma: no cover + pass + + if thumbnail and default_storage.exists(thumbnail.name): + try: + # Remove the thumbnail file from storage + default_storage.delete(thumbnail.name) + except Exception: # pragma: no cover + pass + def save(self, *args, **kwargs): """Custom 'save' method for the Attachment model. @@ -1952,6 +1987,10 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel - Ensure that the 'content_type' and 'object_id' fields are set - Run extra validations """ + import common.tasks + + rebuild = kwargs.pop('rebuild', True) + # Either 'attachment' or 'link' must be specified! if not self.attachment and not self.link: raise ValidationError({ @@ -1979,6 +2018,12 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel if self.file_size != 0: super().save() + # Offload a background task to update the thumbnail for this attachment + if rebuild: + InvenTree.tasks.offload_task( + common.tasks.rebuild_attachment, self.pk, group='attachments' + ) + def clean_svg(self, field): """Sanitize SVG file before saving.""" cleaned = sanitize_svg(field.file.read()) @@ -1990,6 +2035,60 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel return os.path.basename(self.attachment.name) return str(self.link) + def validate_rename(self, filename: str): + """Validate that the provided filename is valid, for renaming an attachment.""" + filename = filename.strip() + + if not self.attachment: + raise ValidationError(_('No file attached to rename')) + + if not filename: + raise ValidationError(_('Filename cannot be empty')) + + try: + validate_file_name(filename, allow_relative_path=False) + except SuspiciousFileOperation: + raise ValidationError(_('Invalid filename')) + + current_ext = os.path.splitext(self.attachment.name)[1] + new_ext = os.path.splitext(filename)[1] + + if current_ext.lower() != new_ext.lower(): + raise ValidationError(_('Cannot change file extension')) + + def rename(self, filename: str): + """Rename the attached file.""" + self.validate_rename(filename) + + old_path = Path(self.attachment.name) + new_path = old_path.parent / filename + + if old_path == new_path: # pragma: no cover + # No change in filename + return + + if not new_path.is_relative_to(old_path.parent): # pragma: no cover + raise ValidationError(_('Invalid filename')) + + new_path = new_path.as_posix() + + if default_storage.exists(new_path): + raise ValidationError(_('A file with this name already exists')) + + # Create a new file with the new name, and delete the old file + new_path = default_storage.save(new_path, self.attachment.file) + + # Ensure that the new file exists + if not default_storage.exists(new_path): # pragma: no cover + raise ValidationError(_('Failed to save renamed file')) + + # Update the database file path + self.attachment.name = new_path + self.save() + + # Remove the old path + default_storage.delete(old_path) + model_type = models.CharField( max_length=100, validators=[common.validators.validate_attachment_model_type], @@ -2002,11 +2101,19 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel attachment = models.FileField( upload_to=rename_attachment, verbose_name=_('Attachment'), + validators=[common.validators.validate_attachment_file], help_text=_('Select file to attach'), blank=True, null=True, ) + thumbnail = models.ImageField( + verbose_name=_('Thumbnail'), + help_text=_('Thumbnail image for this attachment'), + blank=True, + null=True, + ) + link = InvenTree.fields.InvenTreeURLField( blank=True, null=True, @@ -2039,6 +2146,12 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel help_text=_('Date the file was uploaded'), ) + is_image = models.BooleanField( + default=False, + verbose_name=_('Is image'), + help_text=_('True if this attachment is a valid image file'), + ) + file_size = models.PositiveIntegerField( default=0, verbose_name=_('File size'), help_text=_('File size in bytes') ) @@ -2082,6 +2195,69 @@ class Attachment(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel return model_class.check_related_permission(permission, user) + def check_is_image(self) -> bool: + """Check if the attached file is an image. + + We consider it a valid image if: + + - The file exists in storage + - The file can be opened and verified by the PIL library + + """ + if not self.attachment: + return False + + if not self.attachment.name: + return False + + try: + if not default_storage.exists(self.attachment.name): + return False + except Exception: + return False + + img_data = default_storage.open(self.attachment.name).read() + + try: + Image.open(BytesIO(img_data)).verify() + return True + except Exception: + return False + + def generate_thumbnail(self): + """Generate a thumbnail for the attached image.""" + # Remove any existing thumbnail + if self.thumbnail: + self.thumbnail.delete(save=False) + + if not self.attachment: + return + + if not self.attachment.name or not default_storage.exists(self.attachment.name): + return + + # TODO: Offload to plugins, for creating custom thumbnails for different file types + # TODO: If a plugin provides a thumbnail, return early + + # Default action is to generate a thumbnail for image files + try: + img_data = default_storage.open(self.attachment.name).read() + except Exception: + # No file found, or file cannot be read - cannot generate thumbnail + return + + try: + img = Image.open(BytesIO(img_data)) + img.thumbnail((self.THUMBNAIL_SIZE, self.THUMBNAIL_SIZE)) + thumb_io = BytesIO() + img.save(thumb_io, format='PNG') + thumb_io.seek(0) + + thumb_name = f'thumb_{os.path.basename(self.attachment.name)}' + self.thumbnail.save(thumb_name, ContentFile(thumb_io.read()), save=False) + except Exception: + pass + class InvenTreeCustomUserStateModel(models.Model): """Custom model to extends any registered state with extra custom, user defined states. @@ -2609,7 +2785,7 @@ def post_save_parameter_template(sender, instance, created, **kwargs): common.tasks.rebuild_parameters, instance.pk, force_async=True, - group='part', + group='parameters', ) diff --git a/src/backend/InvenTree/common/serializers.py b/src/backend/InvenTree/common/serializers.py index f8041a0a82..c8e2f13920 100644 --- a/src/backend/InvenTree/common/serializers.py +++ b/src/backend/InvenTree/common/serializers.py @@ -1,4 +1,4 @@ -"""JSON serializers for common components.""" +"""API serializers for common components.""" from django.contrib.contenttypes.models import ContentType from django.db.models import Count, OuterRef, Subquery @@ -730,9 +730,11 @@ class AttachmentSerializer(FilterableSerializerMixin, InvenTreeModelSerializer): fields = [ 'pk', 'attachment', + 'thumbnail', 'filename', 'link', 'comment', + 'is_image', 'upload_date', 'upload_user', 'user_detail', @@ -742,7 +744,14 @@ class AttachmentSerializer(FilterableSerializerMixin, InvenTreeModelSerializer): 'tags', ] - read_only_fields = ['pk', 'file_size', 'upload_date', 'upload_user', 'filename'] + read_only_fields = [ + 'pk', + 'file_size', + 'upload_date', + 'upload_user', + 'filename', + 'is_image', + ] def __init__(self, *args, **kwargs): """Override the model_type field to provide dynamic choices.""" @@ -759,6 +768,8 @@ class AttachmentSerializer(FilterableSerializerMixin, InvenTreeModelSerializer): attachment = InvenTreeAttachmentSerializerField(required=False, allow_null=True) + thumbnail = InvenTreeImageSerializerField(read_only=True, allow_null=True) + # The 'filename' field must be present in the serializer filename = serializers.CharField( label=_('Filename'), required=False, source='basename', allow_blank=False @@ -995,7 +1006,7 @@ class SelectionListSerializer(InvenTreeModelSerializer): 'entry_count', ] - default = SelectionEntrySerializer(read_only=True, many=False) + default = SelectionEntrySerializer(read_only=True, allow_null=True, many=False) choices = SelectionEntrySerializer(source='entries', many=True, required=False) entry_count = serializers.IntegerField(read_only=True) diff --git a/src/backend/InvenTree/common/setting/system.py b/src/backend/InvenTree/common/setting/system.py index bfab416a80..0f1283be06 100644 --- a/src/backend/InvenTree/common/setting/system.py +++ b/src/backend/InvenTree/common/setting/system.py @@ -286,25 +286,12 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'choices': common.currency.currency_exchange_plugins, 'default': 'inventreecurrencyexchange', }, - 'INVENTREE_DOWNLOAD_FROM_URL': { - 'name': _('Download from URL'), - 'description': _('Allow download of remote images and files from external URL'), - 'validator': bool, - 'default': False, - }, - 'INVENTREE_DOWNLOAD_IMAGE_MAX_SIZE': { - 'name': _('Download Size Limit'), - 'description': _('Maximum allowable download size for remote image'), + 'INVENTREE_UPLOAD_MAX_SIZE': { + 'name': _('Upload Size Limit'), + 'description': _('Maximum allowable upload size for images and files'), 'units': 'MB', - 'default': 1, - 'validator': [int, MinValueValidator(1), MaxValueValidator(25)], - }, - 'INVENTREE_DOWNLOAD_FROM_URL_USER_AGENT': { - 'name': _('User-agent used to download from URL'), - 'description': _( - 'Allow to override the user-agent used to download images and files from external URL (leave blank for the default)' - ), - 'default': '', + 'default': 10, + 'validator': [int, MinValueValidator(1)], }, 'INVENTREE_STRICT_URLS': { 'name': _('Strict URL Validation'), @@ -716,6 +703,18 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'default': True, 'validator': bool, }, + 'STOCK_ALLOW_EDIT_SERIAL': { + 'name': _('Allow Edit Serial Number'), + 'description': _('Allow editing of serial number for stock items'), + 'default': True, + 'validator': bool, + }, + 'STOCK_ALLOW_DELETE_SERIALIZED': { + 'name': _('Delete Serialized Stock'), + 'description': _('Allow deletion of stock items which have a serial number'), + 'default': True, + 'validator': bool, + }, 'STOCK_BATCH_CODE_TEMPLATE': { 'name': _('Batch Code Template'), 'description': _('Template for generating default batch codes for stock items'), @@ -826,6 +825,14 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'default': False, 'validator': bool, }, + 'BUILDORDER_EXTERNAL_REQUIRED': { + 'name': _('Require External Build Orders'), + 'description': _( + 'Require an external build order when ordering assembled parts from an external supplier' + ), + 'default': False, + 'validator': bool, + }, 'PREVENT_BUILD_COMPLETION_HAVING_INCOMPLETED_TESTS': { 'name': _('Block Until Tests Pass'), 'description': _( @@ -904,6 +911,34 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'default': False, 'validator': bool, }, + 'TRANSFERORDER_ENABLED': { + 'name': _('Enable Transfer Orders'), + 'description': _('Enable transfer order functionality in the user interface'), + 'validator': bool, + 'default': False, + }, + 'TRANSFERORDER_REFERENCE_PATTERN': { + 'name': _('Transfer Order Reference Pattern'), + 'description': _( + 'Required pattern for generating Transfer Order reference field' + ), + 'default': 'TO-{ref:04d}', + 'validator': order.validators.validate_transfer_order_reference_pattern, + }, + 'TRANSFERORDER_REQUIRE_RESPONSIBLE': { + 'name': _('Require Responsible Owner'), + 'description': _('A responsible owner must be assigned to each order'), + 'default': False, + 'validator': bool, + }, + 'SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS': { + 'name': _('Block Incomplete Item Tests'), + 'description': _( + 'Prevent allocation of stock items to sales orders if required item tests are incomplete' + ), + 'default': False, + 'validator': bool, + }, 'PURCHASEORDER_REFERENCE_PATTERN': { 'name': _('Purchase Order Reference Pattern'), 'description': _( @@ -1188,6 +1223,20 @@ SYSTEM_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'default': True, 'validator': bool, }, + 'WEEK_STARTS_ON': { + 'name': _('Week Starts On'), + 'description': _('Starting day of the week, for display in calendar views'), + 'default': '1', + 'choices': [ + ('0', _('Sunday')), + ('1', _('Monday')), + ('2', _('Tuesday')), + ('3', _('Wednesday')), + ('4', _('Thursday')), + ('5', _('Friday')), + ('6', _('Saturday')), + ], + }, 'TEST_STATION_DATA': { 'name': _('Enable Test Station Data'), 'description': _('Enable test station data collection for test results'), diff --git a/src/backend/InvenTree/common/setting/user.py b/src/backend/InvenTree/common/setting/user.py index 57a117e20e..c9cae610ba 100644 --- a/src/backend/InvenTree/common/setting/user.py +++ b/src/backend/InvenTree/common/setting/user.py @@ -268,4 +268,12 @@ USER_SETTINGS: dict[str, InvenTreeSettingsKeyType] = { 'description': _('Save the last used printing machines for a user'), 'default': '', }, + 'DISPLAY_ITEMS_FINAL_LEVEL': { + 'name': _('Display Items at Final Level'), + 'description': _( + 'Automatically default to showing items/parts instead of sub-levels for locations or categories with no children' + ), + 'default': False, + 'validator': bool, + }, } diff --git a/src/backend/InvenTree/common/settings.py b/src/backend/InvenTree/common/settings.py index 0bccd1b1ec..0e32fb99a5 100644 --- a/src/backend/InvenTree/common/settings.py +++ b/src/backend/InvenTree/common/settings.py @@ -81,11 +81,11 @@ def set_global_warning(key: str, options: Optional[dict] = None) -> bool: key (str): The key for the warning. options (dict or bool): Options for the warning, or True to set a default warning. - Raises: - ValueError: If the key is not provided. - Returns: bool: True if the warning was checked / set successfully, False if no check was performed. + + Raises: + ValueError: If the key is not provided. """ if not key: raise ValueError('Key must be provided for global warning setting.') diff --git a/src/backend/InvenTree/common/tasks.py b/src/backend/InvenTree/common/tasks.py index 6a86367937..43afef5245 100644 --- a/src/backend/InvenTree/common/tasks.py +++ b/src/backend/InvenTree/common/tasks.py @@ -204,3 +204,21 @@ def rebuild_parameters(template_id): if n > 0: logger.info("Rebuilt %s parameters for template '%s'", n, template.name) + + +@tracer.start_as_current_span('rebuild_attachment') +def rebuild_attachment(attachment_id: int): + """Rebuild the given attachment, if possible. + + This task is called whenever an attachment is saved, and perform the following tasks: + + - Check if the attachment is an image file, and update the "is_image" field accordingly + - Attempt to generate a thumbnail for the attachment + """ + from common.models import Attachment + + attachment = Attachment.objects.get(pk=attachment_id) + + attachment.is_image = attachment.check_is_image() + attachment.generate_thumbnail() + attachment.save(rebuild=False) diff --git a/src/backend/InvenTree/common/test_api.py b/src/backend/InvenTree/common/test_api.py index 1feffb0b6f..d4875c9014 100644 --- a/src/backend/InvenTree/common/test_api.py +++ b/src/backend/InvenTree/common/test_api.py @@ -1,7 +1,14 @@ """API unit tests for InvenTree common functionality.""" +import io + +from django.core.files.base import ContentFile +from django.core.files.storage import default_storage +from django.core.files.uploadedfile import SimpleUploadedFile from django.urls import reverse +from PIL import Image + import common.models from InvenTree.unit_test import InvenTreeAPITestCase @@ -675,3 +682,320 @@ class ParameterAPITests(InvenTreeAPITestCase): self.assertFalse( common.models.Parameter.objects.filter(template=template.pk).exists() ) + + +class AttachmentAPITests(InvenTreeAPITestCase): + """Tests for the Attachment API.""" + + def test_attachments(self): + """Test API functionality for attachments.""" + from common.models import Attachment + from part.models import Part + + self.assignRole('part.add') + + part = Part.objects.create(name='Test Part', description='A part for testing') + + N = Attachment.objects.count() + + # Upload multiple attachments against the part instance + for ii in range(5): + file_object = io.StringIO('Hello world') + file_object.seek(0) + + fn = f'test_file_{ii}.txt' + + content_file = ContentFile(file_object.read(), name=fn) + + url = reverse('api-attachment-list') + + response = self.post( + url, + data={ + 'model_type': 'part', + 'model_id': part.pk, + 'attachment': content_file, + 'comment': f'This is test file {ii}', + }, + format='multipart', + expected_code=201, + ) + + data = response.data + + # Check that the file has actually been created + self.assertEqual(data['filename'], fn) + self.assertTrue( + default_storage.exists(data['attachment'].replace('/media/', '')) + ) + + # Check that we have the expected number of attachments + self.assertEqual(Attachment.objects.count(), N + 5) + self.assertEqual(part.attachments.count(), 5) + + # Let's rename one of the attachments + att = part.attachments.first() + self.assertEqual(att.basename, 'test_file_0.txt') + + url = reverse('api-attachment-detail', kwargs={'pk': att.pk}) + + # A few failed attempts + for new_name in [ + 'different_ext.docx', + 'test_file_1.txt', + '../../test_file.txt', + ]: + print('- ATTEMPTING:', new_name) + response = self.patch(url, data={'filename': new_name}, expected_code=400) + + att.refresh_from_db() + self.assertEqual(att.basename, 'test_file_0.txt') + + # Let's try seriously this time + new_name = 'a_new_file.txt' + response = self.patch(url, data={'filename': new_name}, expected_code=200) + + att.refresh_from_db() + self.assertEqual(att.basename, new_name) + + # Check that the file has been renamed on disk + self.assertTrue( + default_storage.exists(f'attachments/part/{part.pk}/{new_name}') + ) + self.assertFalse( + default_storage.exists(f'attachments/part/{part.pk}/test_file_0.txt') + ) + + # Next, let's delete the attachment manually - via the API + response = self.delete(url, expected_code=403) + self.assignRole('part.delete') + response = self.delete(url, expected_code=204) + + # Check that the file has been deleted from disk + self.assertFalse( + default_storage.exists(f'attachments/part/{part.pk}/{new_name}') + ) + + self.assertEqual(Attachment.objects.count(), N + 4) + self.assertEqual(part.attachments.count(), 4) + + # Fetch the remaining attachments + attachments = list(part.attachments.all()) + + # Now, delete the part instance + part.active = False + part.save() + part.delete() + + self.assertEqual(Attachment.objects.count(), N) + + for att in attachments: + # Ensure that the file associated with each attachment has been removed + self.assertFalse(default_storage.exists(att.attachment.path)) + + +class AttachmentThumbnailAPITests(InvenTreeAPITestCase): + """Tests for thumbnail generation when uploading attachments via the API.""" + + def setUp(self): + """Set up a Part instance and required roles.""" + from part.models import Part + + super().setUp() + self.assignRole('part.add') + self.assignRole('part.delete') + self.part = Part.objects.create( + name='Thumbnail Test Part', description='Part for thumbnail testing' + ) + + def _make_image_file(self, name='test.png', size=(100, 100), color='red'): + """Return a SimpleUploadedFile containing a valid PNG image.""" + buf = io.BytesIO() + Image.new('RGB', size, color=color).save(buf, format='PNG') + return SimpleUploadedFile(name, buf.getvalue(), content_type='image/png') + + def _upload_attachment(self, file_obj, expected_code=201): + """Upload a file attachment against the test part and return the response.""" + return self.post( + reverse('api-attachment-list'), + data={ + 'model_type': 'part', + 'model_id': self.part.pk, + 'attachment': file_obj, + }, + format='multipart', + expected_code=expected_code, + ) + + def test_thumbnail_valid_image(self): + """Uploading a valid image file should set is_image=True and generate a thumbnail.""" + from common.models import Attachment + + response = self._upload_attachment(self._make_image_file()) + att = Attachment.objects.get(pk=response.data['pk']) + + self.assertTrue(att.is_image) + self.assertTrue(att.thumbnail) + self.assertTrue(default_storage.exists(att.thumbnail.name)) + + def test_thumbnail_invalid_image(self): + """Uploading a file with an image extension but invalid image data should not create a thumbnail.""" + from common.models import Attachment + + bad_file = SimpleUploadedFile( + 'corrupt.png', b'this is not image data', content_type='image/png' + ) + response = self._upload_attachment(bad_file) + att = Attachment.objects.get(pk=response.data['pk']) + + self.assertFalse(att.is_image) + self.assertFalse(att.thumbnail) + + def test_thumbnail_non_image_file(self): + """Uploading a non-image file should leave is_image=False with no thumbnail.""" + from common.models import Attachment + + txt_file = SimpleUploadedFile( + 'document.txt', b'Hello, InvenTree!', content_type='text/plain' + ) + response = self._upload_attachment(txt_file) + att = Attachment.objects.get(pk=response.data['pk']) + + self.assertFalse(att.is_image) + self.assertFalse(att.thumbnail) + + def test_thumbnail_large_image(self): + """A large image attachment should produce a thumbnail no larger than THUMBNAIL_SIZE on each side.""" + from common.models import Attachment + + response = self._upload_attachment(self._make_image_file(size=(1000, 1000))) + att = Attachment.objects.get(pk=response.data['pk']) + + self.assertTrue(att.is_image) + self.assertTrue(att.thumbnail) + + thumb_data = default_storage.open(att.thumbnail.name).read() + thumb_img = Image.open(io.BytesIO(thumb_data)) + self.assertLessEqual(thumb_img.width, Attachment.THUMBNAIL_SIZE) + self.assertLessEqual(thumb_img.height, Attachment.THUMBNAIL_SIZE) + + def test_thumbnail_deleted_with_attachment(self): + """Deleting an attachment via the API should also remove its thumbnail from storage.""" + from common.models import Attachment + + response = self._upload_attachment(self._make_image_file()) + att = Attachment.objects.get(pk=response.data['pk']) + + self.assertTrue(att.thumbnail) + thumb_name = att.thumbnail.name + att_name = att.attachment.name + + self.assertTrue(default_storage.exists(att_name)) + self.assertTrue(default_storage.exists(thumb_name)) + + self.delete( + reverse('api-attachment-detail', kwargs={'pk': att.pk}), expected_code=204 + ) + + self.assertFalse(default_storage.exists(att_name)) + self.assertFalse(default_storage.exists(thumb_name)) + + def test_thumbnail_zero_byte_file(self): + """Uploading a zero-byte file should be rejected by Django's file validation before reaching thumbnail logic.""" + empty_file = SimpleUploadedFile('empty.png', b'', content_type='image/png') + # Django's FileField rejects empty uploads at the serializer/validation layer + response = self._upload_attachment(empty_file, expected_code=400) + self.assertIn('attachment', response.data) + + def test_thumbnail_link_attachment(self): + """An attachment created with an external link (no file) should not generate a thumbnail.""" + from common.models import Attachment + + response = self.post( + reverse('api-attachment-list'), + data={ + 'model_type': 'part', + 'model_id': self.part.pk, + 'link': 'https://example.com/some/resource', + }, + format='multipart', + expected_code=201, + ) + + att = Attachment.objects.get(pk=response.data['pk']) + + self.assertFalse(att.is_image) + self.assertFalse(att.thumbnail) + + def test_is_image_filter(self): + """The is_image filter on the attachment list endpoint should return only matching attachments.""" + url = reverse('api-attachment-list') + base_filters = {'model_type': 'part', 'model_id': self.part.pk} + + # Upload one valid image and three non-image attachments + self._upload_attachment(self._make_image_file('img1.png')) + self._upload_attachment( + SimpleUploadedFile( + 'corrupt.png', b'not image data', content_type='image/png' + ) + ) + self._upload_attachment( + SimpleUploadedFile('doc.txt', b'hello', content_type='text/plain') + ) + self.post( + url, + data={**base_filters, 'link': 'https://example.com/resource'}, + format='multipart', + expected_code=201, + ) + + all_attachments = self.get(url, base_filters, expected_code=200).data + self.assertEqual(len(all_attachments), 4) + + # is_image=true → only the valid image + images = self.get( + url, {**base_filters, 'is_image': 'true'}, expected_code=200 + ).data + self.assertEqual(len(images), 1) + self.assertTrue(images[0]['is_image']) + + # is_image=false → the three non-image attachments + non_images = self.get( + url, {**base_filters, 'is_image': 'false'}, expected_code=200 + ).data + self.assertEqual(len(non_images), 3) + self.assertTrue(all(not a['is_image'] for a in non_images)) + + def test_upload_exceeds_size_limit(self): + """Uploading a file that exceeds INVENTREE_UPLOAD_MAX_SIZE should be rejected with a 400 error.""" + from common.settings import get_global_setting, set_global_setting + + original_limit = get_global_setting('INVENTREE_UPLOAD_MAX_SIZE') + # Use a 1 MB ceiling so the test file stays small and fast + set_global_setting('INVENTREE_UPLOAD_MAX_SIZE', 1, change_user=None) + + limit_bytes = 1 * 1024 * 1024 + + try: + # File exactly at the limit — validator uses >, so this must be accepted + self._upload_attachment( + SimpleUploadedFile( + 'at_limit.txt', b'\x00' * limit_bytes, content_type='text/plain' + ), + expected_code=201, + ) + + # File one byte over the limit — must be rejected + response = self._upload_attachment( + SimpleUploadedFile( + 'over_limit.txt', + b'\x00' * (limit_bytes + 1), + content_type='text/plain', + ), + expected_code=400, + ) + self.assertIn('attachment', response.data) + finally: + set_global_setting( + 'INVENTREE_UPLOAD_MAX_SIZE', original_limit, change_user=None + ) diff --git a/src/backend/InvenTree/common/test_migrations.py b/src/backend/InvenTree/common/test_migrations.py index 6c21dc1074..c6e62cefef 100644 --- a/src/backend/InvenTree/common/test_migrations.py +++ b/src/backend/InvenTree/common/test_migrations.py @@ -4,8 +4,10 @@ import io import os from django.core.files.base import ContentFile +from django.core.files.storage import default_storage from django_test_migrations.contrib.unittest_case import MigratorTestCase +from PIL import Image def get_legacy_models(): @@ -209,6 +211,85 @@ class TestForwardMigrations(MigratorTestCase): self.assertEqual(Attachment.objects.filter(model_type=model).count(), 2) +class TestAttachmentThumbnailMigration(MigratorTestCase): + """Test that migration 0043 correctly populates is_image and generates thumbnails for existing attachments.""" + + migrate_from = ('common', '0041_auto_20251203_1244') + migrate_to = ('common', '0043_auto_20260518_1206') + + def prepare(self): + """Create a set of attachments with different file types in the pre-migration state. + + At this point the Attachment model has no is_image or thumbnail fields yet. + Files are written to storage directly through the FileField so that the + data migration can find them at their stored paths. + """ + Attachment = self.old_state.apps.get_model('common', 'Attachment') + + # 1. Valid PNG image — migration should set is_image=True and create a thumbnail + buf = io.BytesIO() + Image.new('RGB', (100, 100), color='blue').save(buf, format='PNG') + Attachment.objects.create( + model_type='part', + model_id=1, + attachment=ContentFile(buf.getvalue(), name='valid_image.png'), + comment='valid_image', + ) + + # 2. File with a .png extension but non-image content — migration should leave is_image=False + Attachment.objects.create( + model_type='part', + model_id=1, + attachment=ContentFile(b'this is not image data', name='corrupt.png'), + comment='corrupt_image', + ) + + # 3. Plain text file — migration should leave is_image=False with no thumbnail + Attachment.objects.create( + model_type='part', + model_id=1, + attachment=ContentFile(b'Hello, InvenTree!', name='document.txt'), + comment='text_file', + ) + + # 4. Link attachment (no file at all) — migration should skip it entirely + Attachment.objects.create( + model_type='part', + model_id=1, + link='https://example.com/resource', + comment='link_attachment', + ) + + self.assertEqual(Attachment.objects.count(), 4) + + def test_attachment_thumbnails_after_migration(self): + """After applying migrations 0042 and 0043, verify is_image and thumbnail are correct.""" + Attachment = self.new_state.apps.get_model('common', 'Attachment') + + self.assertEqual(Attachment.objects.count(), 4) + + # Valid image → is_image set, thumbnail file created in storage + att = Attachment.objects.get(comment='valid_image') + self.assertTrue(att.is_image) + self.assertTrue(att.thumbnail) + self.assertTrue(default_storage.exists(att.thumbnail.name)) + + # Corrupt image → is_image not set, no thumbnail + att = Attachment.objects.get(comment='corrupt_image') + self.assertFalse(att.is_image) + self.assertFalse(att.thumbnail) + + # Text file → is_image not set, no thumbnail + att = Attachment.objects.get(comment='text_file') + self.assertFalse(att.is_image) + self.assertFalse(att.thumbnail) + + # Link attachment → is_image not set, no thumbnail + att = Attachment.objects.get(comment='link_attachment') + self.assertFalse(att.is_image) + self.assertFalse(att.thumbnail) + + def prep_currency_migration(self, vals: str): """Prepare the environment for the currency migration tests.""" # Set keys diff --git a/src/backend/InvenTree/common/tests.py b/src/backend/InvenTree/common/tests.py index 21a9474328..af0420e62d 100644 --- a/src/backend/InvenTree/common/tests.py +++ b/src/backend/InvenTree/common/tests.py @@ -86,6 +86,11 @@ class AttachmentTest(InvenTreeAPITestCase): } for fn, expected in filenames.items(): + expected_path = f'attachments/part/{part.pk}/{expected}' + # Remove the file if it already exists (i.e. from a previous test run) + if default_storage.exists(expected_path): + default_storage.delete(expected_path) + attachment = Attachment.objects.create( attachment=self.generate_file(fn), comment=f'Testing filename: {fn}', @@ -93,7 +98,6 @@ class AttachmentTest(InvenTreeAPITestCase): model_id=part.pk, ) - expected_path = f'attachments/part/{part.pk}/{expected}' self.assertEqual(attachment.attachment.name, expected_path) self.assertEqual(attachment.file_size, 15) diff --git a/src/backend/InvenTree/common/validators.py b/src/backend/InvenTree/common/validators.py index 02c3805f96..226a42b7d2 100644 --- a/src/backend/InvenTree/common/validators.py +++ b/src/backend/InvenTree/common/validators.py @@ -2,7 +2,8 @@ import re -from django.core.exceptions import ValidationError +from django.core.exceptions import SuspiciousFileOperation, ValidationError +from django.core.files.storage import default_storage from django.utils.translation import gettext_lazy as _ import common.icons @@ -76,6 +77,21 @@ def validate_attachment_model_type(value): raise ValidationError('Model type does not support attachments') +def validate_attachment_file(attachment): + """Ensure that the provided attachment file is valid.""" + max_size = get_global_setting('INVENTREE_UPLOAD_MAX_SIZE', create=False) + + if attachment.size > (max_size * 1024 * 1024): + raise ValidationError( + _(f'File size exceeds maximum upload limit of {max_size} MB') + ) + + try: + default_storage.generate_filename(attachment.name) + except SuspiciousFileOperation: # pragma: no cover + raise ValidationError(_('Invalid file name')) + + def validate_notes_model_type(value): """Ensure that the provided model type is valid. diff --git a/src/backend/InvenTree/company/serializers.py b/src/backend/InvenTree/company/serializers.py index 616941eda5..0ff71a39bc 100644 --- a/src/backend/InvenTree/company/serializers.py +++ b/src/backend/InvenTree/company/serializers.py @@ -1,8 +1,5 @@ """JSON serializers for Company app.""" -import io - -from django.core.files.base import ContentFile from django.db.models import Prefetch from django.utils.translation import gettext_lazy as _ @@ -26,7 +23,6 @@ from InvenTree.serializers import ( InvenTreeTagModelSerializer, NotesFieldMixin, OptionalField, - RemoteImageMixin, ) from .models import ( @@ -113,7 +109,6 @@ class CompanySerializer( FilterableSerializerMixin, DataImportExportSerializerMixin, NotesFieldMixin, - RemoteImageMixin, InvenTreeModelSerializer, ): """Serializer for Company object (full detail).""" @@ -145,7 +140,6 @@ class CompanySerializer( 'notes', 'parts_supplied', 'parts_manufactured', - 'remote_image', 'primary_address', 'tax_id', 'parameters', @@ -193,27 +187,6 @@ class CompanySerializer( parameters = common.filters.enable_parameters_filter() - def save(self): - """Save the Company instance.""" - super().save() - - company = self.instance - - # Check if an image was downloaded from a remote URL - remote_img = getattr(self, 'remote_image_file', None) - - if remote_img and company: - fmt = remote_img.format or 'PNG' - buffer = io.BytesIO() - remote_img.save(buffer, format=fmt) - - # Construct a simplified name for the image - filename = f'company_{company.pk}_image.{fmt.lower()}' - - company.image.save(filename, ContentFile(buffer.getvalue())) - - return self.instance - @register_importer() class ContactSerializer(DataImportExportSerializerMixin, InvenTreeModelSerializer): diff --git a/src/backend/InvenTree/company/test_migrations.py b/src/backend/InvenTree/company/test_migrations.py index cfea9f7cca..741c7f187f 100644 --- a/src/backend/InvenTree/company/test_migrations.py +++ b/src/backend/InvenTree/company/test_migrations.py @@ -299,7 +299,7 @@ class TestAddressMigration(MigratorTestCase): c1 = Company.objects.filter(name='Company 1').first() c2 = Company.objects.filter(name='Company 2').first() - self.assertEqual(len(Address.objects.all()), 2) + self.assertEqual(Address.objects.count(), 2) a1 = Address.objects.filter(company=c1.pk).first() a2 = Address.objects.filter(company=c2.pk).first() diff --git a/src/backend/InvenTree/generic/states/tests.py b/src/backend/InvenTree/generic/states/tests.py index 17a2221d1f..fe33eaf78e 100644 --- a/src/backend/InvenTree/generic/states/tests.py +++ b/src/backend/InvenTree/generic/states/tests.py @@ -232,8 +232,8 @@ class ApiTests(InvenTreeAPITestCase): """Test the API endpoint for listing all status models.""" response = self.get(reverse('api-status-all')) - # 10 built-in state classes, plus the added GeneralState class - self.assertEqual(len(response.data), 11) + # 11 built-in state classes, plus the added GeneralState class + self.assertEqual(len(response.data), 12) # Test the BuildStatus model build_status = response.data['BuildStatus'] @@ -273,7 +273,7 @@ class ApiTests(InvenTreeAPITestCase): ) response = self.get(reverse('api-status-all')) - self.assertEqual(len(response.data), 11) + self.assertEqual(len(response.data), 12) stock_status_cstm = response.data['StockStatus'] self.assertEqual(stock_status_cstm['status_class'], 'StockStatus') diff --git a/src/backend/InvenTree/importer/models.py b/src/backend/InvenTree/importer/models.py index d1c714bffa..8dae1376ab 100644 --- a/src/backend/InvenTree/importer/models.py +++ b/src/backend/InvenTree/importer/models.py @@ -241,7 +241,7 @@ class DataImportSession(models.Model): ) # Create the column mappings - DataImportColumnMap.objects.bulk_create(column_mappings) + DataImportColumnMap.objects.bulk_create(column_mappings, batch_size=250) self.status = DataImportStatusCode.MAPPING.value self.save() @@ -337,7 +337,7 @@ class DataImportSession(models.Model): imported_rows.append(row) # Perform database writes as a single operation - DataImportRow.objects.bulk_create(imported_rows) + DataImportRow.objects.bulk_create(imported_rows, batch_size=250) # Mark the import task as "PROCESSING" self.status = DataImportStatusCode.PROCESSING.value diff --git a/src/backend/InvenTree/importer/tests.py b/src/backend/InvenTree/importer/tests.py index b4b7b99a6f..17490b9283 100644 --- a/src/backend/InvenTree/importer/tests.py +++ b/src/backend/InvenTree/importer/tests.py @@ -39,7 +39,7 @@ class ImporterTest(ImporterMixin, InvenTreeTestCase): session.extract_columns() - self.assertEqual(session.column_mappings.count(), 15) + self.assertEqual(session.column_mappings.count(), 14) # Check some of the field mappings for field, col in [ diff --git a/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ar/LC_MESSAGES/django.po index 75e47597df..3072988a23 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:33\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:09\n" "Last-Translator: \n" "Language-Team: Arabic\n" "Language: ar_SA\n" @@ -89,6 +89,7 @@ msgstr "تعذّر تحويل {original} إلى {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "الكمية المقدمة غير صحيحة" @@ -104,11 +105,11 @@ msgstr "أدخل التاريخ" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "خطأ فى الاتصال" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "البريد الإلكتروني" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 -msgid "Model type" -msgstr "" - -#: common/models.py:1997 -msgid "Target model type for image" -msgstr "" - -#: common/models.py:2005 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:2021 -msgid "Comment" +#: common/models.py:2019 +msgid "No file attached to rename" msgstr "" #: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 +msgid "Model type" +msgstr "" + +#: common/models.py:2072 +msgid "Target model type for image" +msgstr "" + +#: common/models.py:2080 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:2096 +msgid "Comment" +msgstr "" + +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/bg/LC_MESSAGES/django.po index 0ff0231d5e..66e0d275a0 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:09\n" "Last-Translator: \n" "Language-Team: Bulgarian\n" "Language: bg_BG\n" @@ -89,6 +89,7 @@ msgstr "Преобразуването на {original} в {unit} не беше #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Въведена е недопустима стойност" @@ -104,11 +105,11 @@ msgstr "Въведи дата" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Грешка при съединението" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Сървърът отговари с невалиден статусен код" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Възникна изключение" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Сървърът отговори с невалидна стойност за дължината на съдържанието (Content-Length)" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Размерът на изображението е твърде голям" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Сваляното на изображение превиши максималния размер" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Отдалеченият сървър върна празен отговор" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Трябва да активирате двойно оторизиране преди да направите, каквото и да е." @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Част" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Потребител" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 -msgid "Model type" -msgstr "" - -#: common/models.py:1997 -msgid "Target model type for image" -msgstr "" - -#: common/models.py:2005 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:2021 -msgid "Comment" +#: common/models.py:2019 +msgid "No file attached to rename" msgstr "" #: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 +msgid "Model type" +msgstr "" + +#: common/models.py:2072 +msgid "Target model type for image" +msgstr "" + +#: common/models.py:2080 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:2096 +msgid "Comment" +msgstr "" + +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Изпратено" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Цялостна наличност" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Място в склада" @@ -8546,11 +8651,11 @@ msgstr "Място в склада" msgid "Stock Locations" msgstr "Места в склада" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/cs/LC_MESSAGES/django.po index 2a3460c7b3..0d7fadec37 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-05-01 04:02\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:09\n" "Last-Translator: \n" "Language-Team: Czech\n" "Language: cs_CZ\n" @@ -89,6 +89,7 @@ msgstr "Nelze převést {original} na {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Vyplněno neplatné množství" @@ -104,11 +105,11 @@ msgstr "Zadejte datum" msgid "Invalid decimal value" msgstr "Neplaté desetinné číslo" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "Neplatná URL: nelze zjistit název hostitele" msgid "URL points to a private or reserved IP address" msgstr "URL směřuje na soukromou nebo rezervovanou IP adresu" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "Příliš mnoho přesměrování" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Chyba spojení" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Server odpověděl s neplatným stavovým kódem" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Došlo k výjimce" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Server odpověděl s neplatnou hodnotou Content-Length" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Velikost obrázku je příliš velká" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Stahování obrázku překročilo maximální velikost" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Vzdálený server vrátil prázdnou odpověď" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Zadaná URL adresa není platný soubor obrázku" @@ -219,7 +220,7 @@ msgstr "Přihlásit se do aplikace" msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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í." @@ -263,124 +264,108 @@ msgstr "Referenční číslo musí odpovídat požadovanému vzoru" msgid "Reference number is too large" msgstr "Referenční číslo je příliš velké" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Neplatný výběr" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Název" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Popis" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Popis (volitelně)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Cesta" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplicitní názvy nemohou existovat pod stejným nadřazeným názvem" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Poznámky (volitelné)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Data čárového kódu" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Data čárového kódu třetí strany" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hash čárového kódu" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Jedinečný hash dat čárového kódu" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Nalezen existující čárový kód" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Chyba serveru" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Server zaznamenal chybu." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Musí být platné číslo" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Měna" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Vyberte měnu z dostupných možností" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Toto pole nesmí být nulové." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Neplatná hodnota" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Vzdálený obraz" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL souboru vzdáleného obrázku" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Stahování obrázků ze vzdálené URL není povoleno" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Nepodařilo se stáhnout obrázek ze vzdálené adresy URL" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Neplatný formát typu obsahu" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "Typ obsahu nenalezen" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "Typ obsahu neodpovídá požadované třídě mixinu" @@ -552,8 +537,8 @@ msgstr "Neplatná fyzikální jednotka" msgid "Not a valid currency code" msgstr "Neplatný kód měny" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Stav objednávky" @@ -561,21 +546,21 @@ msgstr "Stav objednávky" msgid "Parent Build" msgstr "Nadřazená sestava" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Zahrnout varianty" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Zahrnout varianty" msgid "Part" msgstr "Díl" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -605,7 +590,7 @@ msgstr "Kategorie" msgid "Ancestor Build" msgstr "Sestava předků" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Přiřazeno mě" @@ -653,11 +638,11 @@ msgstr "Dokončeno před" msgid "Completed after" msgstr "Dokončeno po" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Min. datum" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Max datum" @@ -669,16 +654,16 @@ msgstr "Vyloučit strom" 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:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Spotřební materiál" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Volitelné" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Sestava" @@ -687,32 +672,32 @@ msgstr "Sestava" msgid "Tracked" msgstr "Sledováno" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testovatelné" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Objednávka nevyřízená" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Přiděleno" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Spotřebováno" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Na objednávku" @@ -720,7 +705,7 @@ msgstr "Na objednávku" msgid "Build not found" msgstr "Sestava nenalezena" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Výrobní příkaz" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Lokace" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Výstup" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Referenční číslo výrobního příkazu" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Stav sestavení" msgid "Build status code" msgstr "Stavový kód sestavení" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kód dávky" @@ -870,8 +855,8 @@ msgstr "Kód dávky" msgid "Batch code for this build output" msgstr "Dávkový kód pro tento výstup sestavení" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Datum vytvoření" @@ -891,7 +876,7 @@ msgstr "Cílové datum dokončení" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Datum dokončení" @@ -907,8 +892,8 @@ msgstr "Vystavil" msgid "User who issued this build order" msgstr "Uživatel, který vystavil tento výrobní příkaz" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odpovědný" @@ -917,12 +902,12 @@ msgstr "Odpovědný" 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:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Externí odkaz" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Odkaz na externí URL" @@ -934,8 +919,8 @@ msgstr "Priorita sestavení" msgid "Priority of this build order" msgstr "Priorita tohoto výrobního příkazu" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Kód projektu" @@ -968,7 +953,7 @@ msgstr "Výrobní příkaz byl dokončen" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nebyl specifikováno žádný výstup sestavení" @@ -980,47 +965,47 @@ msgstr "Výstup sestavení je již dokončen" msgid "Build output does not match Build Order" msgstr "Výstup neodpovídá výrobnímu příkazu" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Množství musí být vyšší než nula" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 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:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 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:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "Přiřazené skladové položky jsou stále ve výrobě" -#: build/models.py:1219 +#: build/models.py:1221 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:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Řádková položka výrobního příkazu" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Vytvořit objekt" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Vytvořit objekt" msgid "Quantity" msgstr "Množství" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Vyžadované množství pro výrobní příkaz" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Množství spotřebovaných zásob" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Vybraná skladová položka neodpovídá řádku kusovníku" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "Přiřazené množství musí být vyšší než nula" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Množství musí být 1 pro zřetězený sklad" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Skladová položka je nadměrně zabrána" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Skladové položky" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Zdrojová skladová položka" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Skladové množství pro sestavení" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Instalovat do" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Cílová skladová položka" @@ -1099,7 +1084,7 @@ msgstr "Cílová skladová položka" msgid "Build Level" msgstr "Úroveň sestavení" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Název dílu" @@ -1135,7 +1120,7 @@ msgstr "Celé množství požadované pro sledovatelné díly" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sériová čísla" @@ -1156,8 +1141,8 @@ msgstr "Automaticky zvolit sériová čísla" 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:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Následující sériová čísla již existují nebo jsou neplatná" @@ -1245,7 +1230,7 @@ msgstr "Přijmout, že skladové položky nebyly plně přiřazeny k tomuto výr msgid "Required stock has not been fully allocated" msgstr "Požadované zásoby nebyly plně přiděleny" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Přijmout neúplné" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part musí ukazovat na stejný díl jako výrobní příkaz" msgid "Item must be in stock" msgstr "Položka musí být skladem" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupné množství ({q}) překročeno" @@ -1306,7 +1291,7 @@ msgstr "Pro přidělení sledovaných dílů musí být zadán výstup sestavy" 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Položky přidělení musí být poskytnuty" @@ -1386,9 +1371,9 @@ msgstr "Informace instalace" msgid "Build" msgstr "Sestavení" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Díl dodavatele" @@ -1404,7 +1389,7 @@ msgstr "Reference sestavení" msgid "Part Category Name" msgstr "Název kategorie dílů" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Sledovatelné" @@ -1412,29 +1397,29 @@ msgstr "Sledovatelné" msgid "Inherited" msgstr "Zděděno" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Povolit varianty" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Položka kusovníku" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "Ve výrobě" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Naplánováno na sestavení" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Externí zásoby" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Dostupné zásoby" @@ -1531,6 +1516,10 @@ 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:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Uživatel nemá oprávnění k odstranění této přílohy" @@ -1554,610 +1543,634 @@ msgstr "Žádný plugin" msgid "Project Code Label" msgstr "Popisek kódu projektu" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Aktualizováno" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Časové razítko poslední aktualizace" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Aktualizoval/a" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Uživatel, který naposledy aktualizoval tento objekt" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Jedinečný kód projektu" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Popis projektu" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Uživatel nebo skupina odpovědná za tento projekt" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Tlačítko nastavení" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Hodnota nastavení" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Zvolená hodnota není platnou možností" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Hodnota musí být logická hodnota" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Hodnota musí být celé číslo" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Hodnota musí být platné číslo" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Hodnota neprošla kontrolou platnosti" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Klíčový text musí být jedinečný" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Uživatel" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Množství cenové slevy" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Cena" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Jednotková cena při stanoveném množství" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Koncový bod" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Koncový bod, ve kterém je tento webhook přijímán" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Název tohoto webhooku" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivní" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Je tento webhook aktivní" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token pro přístup" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Tajný klíč" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Sdílený tajný klíč pro HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID zprávy" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Unikátní identifikátor pro tuto zprávu" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Hostitel" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Hostitel, od kterého byla tato zpráva přijata" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Záhlaví" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Záhlaví této zprávy" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Tělo" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Tělo zprávy" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Koncový bod, na kterém byla zpráva přijata" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Pracoval na" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Byla práce na této zprávě dokončena?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "ID" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Název" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Odkaz" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Zveřejněno" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Souhrn" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Přečteno" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Byla tato novinka přečtena?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Soubor obrázku" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Cílový typ modelu pro tento obrázek" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "Cílové ID modelu pro tento obrázek" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Vlastní jednotka" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Symbol jednotky musí být unikátní" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Název jednotky musí být platný identifikátor" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Název jednotky" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Volitelný symbol jednotky" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definice" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definice jednotky" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Příloha" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Chybějící soubor" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Chybějící externí odkaz" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Typ modelu" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Cílový typ modelu pro obrázek" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Vyberte soubor k přiložení" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Komentář" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Komentář přílohy" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Datum nahrání" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Datum, kdy byl soubor nahrán" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Velikost souboru" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Velikost souboru v bytech" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Uveden neplatný typ modelu pro přílohu" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Vlastní stav" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Vlastní stavy" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Nastavení referenčního stavu" -#: common/models.py:2109 +#: common/models.py:2184 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:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logický klíč" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Hodnota" -#: common/models.py:2121 +#: common/models.py:2196 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:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Název stavu" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Popisek" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Štítek, který bude zobrazen na webu" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Barva" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Barva, která bude zobrazena ve frontendu" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Model" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Model, ke kterému je tento stav přiřazen" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Musí být vybrán model" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Musí být vybrán klíč" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Musí být vybrán logický klíč" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "Klíč se musí lišit od logického klíče" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Musí být uvedena platná referenční třída statusu" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 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:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Výběrové pole" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Výběrová pole" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Název výběrového pole" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Popis výběrového pole" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Uzamčeno" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Je tento seznam výběrů uzamčen?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Může být tento seznam výběru použit?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Zdrojový plugin" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Plugin, který poskytuje seznam výběru" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Zdrojový řetězec" -#: common/models.py:2287 +#: common/models.py:2362 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:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Výchozí položka" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Výchozí položka pro tento seznam výběru" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Vytvořeno" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "Datum a čas vytvoření výběrového seznamu" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Poslední aktualizace" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Položka seznamu výběrů" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Položky seznamu výběrů" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Seznam výběru, do kterého tato položka patří" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Název výběrového seznamu" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Popisek pro výběr seznamu" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Popis vstupu výběrového seznamu" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Je tento výběr výběrového listu aktivní?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Šablona parametru" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "Šablona parametru" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Parametry zaškrtávacího pole nemohou mít jednotky" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Parametry zaškrtávacího pole nemohou mít výběr" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Volby musí být jedinečné" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Název šablony parametru musí být jedinečný" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "Cílový typ modelu pro šablonu tohoto parametru" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Název parametru" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Jednotky" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Fyzické jednotky pro tento parametr" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Popis parametru" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Zaškrtávací políčko" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Je tento parametr zaškrtávací políčko?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Volby" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Platné volby pro tento parametr (oddělené čárkami)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Seznam výběru pro tento parametr" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Povoleno" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "Je šablona tohoto parametru povolena?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "Parametr" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "Parametry" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Neplatná volba pro hodnotu parametru" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Neplatný typ modelu pro daný parametr" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "ID modelu" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "ID cílového modelu pro tento parametr" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Šablona" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "Šablona parametru" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Data" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Hodnota parametru" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Hodnota parametru" msgid "Note" msgstr "Poznámka" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Volitelné pole pro poznámku" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Sken čárového kódu" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Data čárového kódu" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Uživatel, který naskenoval čárový kód" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Časová značka" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Datum a čas skenování čárového kódu" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "Koncový bod URL, který zpracoval čárový kód" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Kontextová data pro skenov čárového kódu" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Odpověď" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Data z odezvy z čárového kódu" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Výsledek" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "Bylo skenování čárového kódu úspěšné?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Vyskytla se chyba" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "E-mailová zpráva" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "E-mailové zprávy" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Oznámeno" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Odesláno" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Selhalo" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Doručeno" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Potvrzeno" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Příchozí" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Odchozí" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Bez odpovědi" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Sledovat doručení" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Sledovat přečtení" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Sledovat kliknutí" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "Globální ID" -#: common/models.py:3096 +#: common/models.py:3171 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:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "ID vlákna" -#: common/models.py:3105 +#: common/models.py:3180 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:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Vlákno" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Vlákno propojeno k této zprávě" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "Priorita" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "Emailové vlákno" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "Emailové vlákna" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Klíč" -#: common/models.py:3183 +#: common/models.py:3258 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:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Unikátní identifikátor pro toto vlákno" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Začato interně" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Bylo toto vlákno započato interně?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Datum a čas kdy bylo vlákno vytvořeno" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Datum a čas kdy bylo vlákno naposledy aktualizováno" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Přijaté položky" @@ -2457,7 +2470,7 @@ msgstr "Název souboru" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Typ modelu" @@ -2601,13 +2614,13 @@ msgstr "Interval aktualizace měny" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dny" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Plugin pro aktualizaci měn k použití" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Stáhnout z URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Limit velikosti stahování" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Maximální povolená velikost stahování vzdáleného obrázku" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "User-agent použitý ke stažení z adresy URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Přísná validace URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Vyžadovat specifikaci schématu při ověřování adres URL" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Interval kontroly aktualizací" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automatické Zálohování" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Interval automatického zálohování" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Interval mazání úloh" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Interval odstranění protokolu chyb" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Interval pro odstranění oznámení" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "Interval mazání emailů" -#: common/setting/system.py:363 +#: common/setting/system.py:343 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:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "Chránit Email log" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "Zabránit odstranění vstupů email logů" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Podpora čárových kódů" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Ukládat výsledky čárových kódů" -#: common/setting/system.py:383 +#: common/setting/system.py:363 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:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Maximální počet naskenovaných čárových kódů" -#: common/setting/system.py:389 +#: common/setting/system.py:369 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:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Zpoždění vstupu čárového kódu" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Doba zpoždění zpracování vstupu čárového kódu" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Podpora webové kamery pro čárové kódy" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Zobrazovat data čárových kódů" -#: common/setting/system.py:408 +#: common/setting/system.py:388 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:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Plugin pro generování čárových kódů" -#: common/setting/system.py:414 +#: common/setting/system.py:394 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:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Revize dílu" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Povolit pole revize pro díl" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Revize pouze pro sestavy" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Povolit revize pouze pro sestavy" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Povolit odstranění ze sestavy" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:438 +#: common/setting/system.py:418 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:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Povolit duplicitní IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Povolit více dílům sdílet stejný IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Povolit editaci IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Kopírovat data BOM dílu" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Kopírovat data parametrů dílu" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Kopírovat zkušební data dílu" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Kopírovat šablony parametrů kategorie" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Díly jsou ve výchozím nastavení šablony" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Možné zakoupit" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Díly jsou zakoupitelné ve výchozím nastavení" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Prodejné" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Díly jsou prodejné ve výchozím nastavení" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Díly jsou sledovatelné ve výchozím nastavení" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Nehmotné (virtuální)" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Díly jsou nehmotné (virtuální) ve výchozím nastavení" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Zobrazit související díly" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Zobrazit související díly pro díl" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Počáteční údaje zásob" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Počáteční údaje dodavatele" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Formát zobrazení jména dílu" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Formát pro zobrazení názvu dílu" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Výchozí ikona kategorie dílu" -#: common/setting/system.py:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Minimální počet desetinných míst u cen" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Maximální počet desetinných míst u cen" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Použít ceny dodavatele" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Přepsání historie nákupu" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Použít ceny skladových položek" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Stáří cen skladových položek" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Použít cenu varianty" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Zahrnutí cen variant do celkových cenových kalkulací" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Pouze aktivní varianty" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Automatická aktualizace cen" -#: common/setting/system.py:627 +#: common/setting/system.py:607 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:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Interval přestavby cen" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Interní ceny" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Povolit interní ceny pro díly" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Přepis interní ceny" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "Povolit nulovou hodnotu kusovníku" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Povolit tisk štítků" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Povolit tisk štítků z webového rozhraní" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "DPI rozlišení štítků" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Povolit reporty" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Povolit generování reportů" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Režim ladění chyb" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Generovat reporty v režimu ladění (HTML výstup)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Zaznamenávat chyby reportů" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Zaznamenávat chyby, které se vyskytnou při vytváření reportů" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Velikost stránky" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Výchozí velikost stránky pro PDF reporty" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Vynutit jednotky parametru" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Globálně unikátní sériová čísla" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Odstranit vyčerpané zásoby" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "Odstranit serializované zásoby" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "Povolit odstranění skladových položek se sériovým číslem" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Šablona kódu dávky" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Expirace zásob" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Povolit funkci expirace zásob" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Prodat prošlé zásoby" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Povolit prodej prošlých zásob" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Čas stáří zásob" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Sestavit prošlé zásoby" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Povolit sestavování s prošlými zásobami" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Kontrola vlastnictví zásob" -#: common/setting/system.py:753 +#: common/setting/system.py:745 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:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Výchozí ikona umístění zásob" -#: common/setting/system.py:759 +#: common/setting/system.py:751 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:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Zobrazit nainstalované skladové položky" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Zobrazit nainstalované skladové položky ve skladových tabulkách" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Zkontrolovat BOM při instalaci položek" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Povolit převod mimo sklad" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Referenční vzor objednávky sestavy" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Vyžadovat odpovědného vlastníka" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 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:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Vyžadovat aktivní díl" -#: common/setting/system.py:799 +#: common/setting/system.py:791 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:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Vyžadovat uzamčený díl" -#: common/setting/system.py:805 +#: common/setting/system.py:797 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:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Vyžadovat schválený kusovník" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Vyžadovat uzavření podobjednávek" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Externí výrobní příkazy" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Povolit funkcionalitu externích výrobních příkazů" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "Vyžadovat externí výrobní příkazy" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "Vyžadovat externí výrobní příkaz při objenání montovaných dílů od externího dodavatele" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokovat, dokud testy neprojdou" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Prodejní objednávky označené jako odeslané se automaticky dokončí a obejdou stav „odesláno“" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "Blokovat nekompletné testy položky" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "Zabránit přiřazení skladových položek do prodejních objednávek, pokud jsou požadované testy neúplné" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Referenční vzor nákupní objednávky" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Úprava dokončených nákupních objednávek" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Převést měnu" -#: common/setting/system.py:931 +#: common/setting/system.py:939 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:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Automatické dokončování nákupních objednávek" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Povolit pole zapomenutého hesla" -#: common/setting/system.py:946 +#: common/setting/system.py:954 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:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Povolit registrace" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Povolit SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Povolit SSO na přihlašovacích stránkách" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Povolit SSO registraci" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Povolit synchronizaci SSO skupin" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "klíč SSO skupiny" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "mapa SSO skupiny" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Odstranit skupiny mimo SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Vyžadován e-mail" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Požadovat, aby uživatel při registraci zadal e-mail" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Automaticky vyplnit SSO uživatele" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Mail dvakrát" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Heslo dvakrát" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Povolené domény" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Skupina při registraci" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Vynutit MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Uživatelé musí používat vícefaktorové zabezpečení." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 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:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Zkontrolovat pluginy při spuštění" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Zkontrolovat aktualizace pluginů" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Povolit pravidelné kontroly aktualizací nainstalovaných pluginů" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Povolit integraci URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Povolit plug-inům přidávat trasy URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Povolit integraci navigace" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Povolit integrování pluginů do navigace" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Povolit integraci aplikací" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Povolit pluginům přidávát aplikace" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Povolit integraci plánu" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Povolit pluginům spouštění naplánovaných úloh" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Povolit integraci událostí" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Povolit pluginům reagovat na interní události" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Povolit rozhraní intergace" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Povolit integrování pluginů do uživatelského rozhraní" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "Povolit integraci emailu" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Povolit pluginům zpracování odchozích/příchozích emailů" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Povolit projektové kódy" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Povolit projektové kódy pro sledování projektů" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "Povolit inventuru" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 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:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Vyloučit externí umístění" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 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:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Perioda automatické inventury" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "Počet dní mezi automatickým záznamem inventury" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "Odstranit staré záznamy inventur" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 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:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "Interval odstranění inventury" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 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:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "Odstranit staré záznamy sledování zásob" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 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:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "Interval odstranění sledování zásob" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 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:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Zobrazit celá jména uživatelů" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 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:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Zobrazit uživatelské profily" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Zobrazit profily uživatelů na jejich profilové stránce" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "Týden začíná" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "Počáteční den v týdnu pro zobrazení v zobrazení kalendáře" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "Neděle" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "Pondělí" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "Úterý" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "Středa" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "Čtvrtek" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "Pátek" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "Sobota" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Povolit data zkušební stanice" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 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:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "Povolit ping stroje" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Povolit pravidelný úkol pingu registrovaných strojů pro kontrolu jejich stavu" @@ -3951,6 +4008,14 @@ msgstr "Poslední použité tiskárny" msgid "Save the last used printing machines for a user" msgstr "Uložte poslední použité tiskárny pro uživatele" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "Zobrazit položky na poslední úrovni" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "Automaticky zobrazit položky místo podúrovní pro umístění nebo kategorie bez podkategorií" + #: common/validators.py:38 msgid "All models" msgstr "Všechny modely" @@ -4012,8 +4077,8 @@ msgstr "Interní díl je aktivní" msgid "Supplier is Active" msgstr "Dodavatel je aktivní" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Výrobce" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Kontaktní e-mailová adresa" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontakt" @@ -4111,7 +4176,7 @@ msgstr "DIČ" msgid "Company Tax ID" msgstr "DIČ společnosti" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adresa" @@ -4203,12 +4268,12 @@ msgstr "Doručovací poznámky pro interní použití" msgid "Link to address information (external)" msgstr "Odkaz na informace o adrese (externí)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Výrobce dílu" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Základní díl" @@ -4221,8 +4286,8 @@ msgstr "Zvolte díl" msgid "Select manufacturer" msgstr "Vyberte výrobce" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN" @@ -4250,8 +4315,8 @@ msgstr "Jednotky balení musí být větší než nula" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Dodavatel" msgid "Select supplier" msgstr "Vyberte dodavatele" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Skladová evidence dodavatele" @@ -4290,15 +4355,15 @@ msgstr "Adresa URL pro odkaz na externí díl dodavatele" msgid "Supplier part description" msgstr "Popis dílu dodavatele" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "základní cena" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimální poplatek (např. poplatek za skladování)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Balení" @@ -4315,7 +4380,7 @@ msgstr "Počet kusů v balení" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "více" @@ -4339,23 +4404,23 @@ msgstr "Datum poslední aktualizace údajů o dostupnosti" msgid "Supplier Price Break" msgstr "Cenová sleva dodavatele" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Výchozí měna používaná pro tohoto dodavatele" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Jméno společnosti" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Skladem" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "Množstevní sleva" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "Hezké jméno" @@ -4511,7 +4576,7 @@ msgstr "Původní data řádku" msgid "Errors" msgstr "Chyby" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Platné" @@ -4623,7 +4688,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:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Neznámý" @@ -4727,7 +4792,7 @@ msgstr "Klíč vlastnosti" msgid "Value of the property" msgstr "Hodnota vlastnosti" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Skupina" @@ -4751,117 +4816,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:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Označení objednávky" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Vynikající" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Má projektový kód" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Vytvořil(a)" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Vytvořeno před" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Vytvořeno po" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Má počáteční datum" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Datum začátku před" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Datum začátku po" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Má cílové datum" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Cílové datum před" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Cílové datum po" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "Aktualizováno před" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "Aktualizováno po" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Má cenu" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Dokončeno před" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Dokončeno po" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Externí výrobní příkaz" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Objednávka" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Objednávka byla dokončena" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Interní díl" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Objednávka čeká na vyřízení" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Dokončeno" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Má zásilku" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "Zásilka nebyla nalezena" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Nákupní objednávka" msgid "Sales Order" msgstr "Prodejní objednávka" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Celková cena" msgid "Total price for this order" msgstr "Celková cena za tuto objednávku" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Měna objednávky" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "Adresa nesouhlasí s vybranou společností" msgid "Order description (optional)" msgstr "Popis objednávky (volitelné)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Vyberte kód projektu pro tuto objednávku" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Odkaz na externí stránku" @@ -4930,7 +4995,7 @@ msgstr "Datum zahájení" msgid "Scheduled start date for this order" msgstr "Plánované datum zahájení této objednávky" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cílené datum" @@ -4963,12 +5028,12 @@ msgstr "Kontaktní bod pro tuto objednávku" msgid "Company address for this order" msgstr "Adresa společnosti pro tuto objednávku" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Číslo objednávky" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Stav" @@ -4992,15 +5057,15 @@ msgstr "Referenční kód objednávky dodavatele" msgid "received by" msgstr "přijal" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Datum dokončení objednávky" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Místo určení" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Cílové místo pro přijaté položky" @@ -5024,616 +5089,624 @@ msgstr "Množství musí být kladné" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "Sériová čísla nemohou být přiřazena virtuálním dílům" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Zákazník" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Společnost, jíž se položky prodávají" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Stav prodejní objednávky" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Reference zákazníka " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Referenční kód objednávky zákazníka" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Datum odeslání" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "odesláno společností" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Objednávka je již dokončena" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Objednávka je již zrušena" -#: order/models.py:1459 +#: order/models.py:1463 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:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "Objednávka je uzamčena a nelze ji upravit" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Množství položky" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "Číslo linky" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "Číslo řádku pro tuto položku (nepovinné)" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Označení řádkové položky" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Poznámky k řádkovým položkám" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Popis řádkové položky (nepovinné)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Dodatečný kontext pro tento řádek" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Cena za jednotku" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Řádková položka nákupní objednávky" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Dodavatelský díl musí odpovídat dodavateli" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "Objednávka sestavení musí být označená jako externí" -#: order/models.py:1951 +#: order/models.py:1971 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:1957 +#: order/models.py:1977 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:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "Externí výrobní příkaz je vyžadován pro montážní díly" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Díl dodavatele" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Doručeno" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Počet přijatých položek" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Nákupní cena" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Jednotková nákupní cena" -#: order/models.py:2025 +#: order/models.py:2056 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:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Nákupní příkaz extra linka" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Řádková položka prodejní objednávky" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Prodejní cena" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Jednotková prodejní cena" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Odesláno" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Odeslané množství" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Zásilka prodejní objednávky" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "Adresa zásilky musí odpovídat adrese zákazníka" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "Dodací adresa pro tuto zásilku" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Datum odeslání" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Datum doručení" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Datum doručení zásilky" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Kontroloval(a)" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Uživatel, který zkontroloval tuto zásilku" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Doprava" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Číslo zásilky" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Sledovací číslo" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Informace o sledování zásilky" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Číslo faktury" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Referenční číslo přiřazené faktury" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Zásilka již byla odeslána" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Zásilka nemá žádné přidělené skladové položky" -#: order/models.py:2446 +#: order/models.py:2477 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:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Prodejní příkaz extra linka" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Přidělení prodejní objednávky" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Skladová položka nebyla přiřazena" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 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:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Přidělené množství nesmí překročit množství zásob" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Zabrané množství musí být větší než nula" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Množství musí být 1 pro serializovanou skladovou položku" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Prodejní objednávka neodpovídá zásilce" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Zásilka neodpovídá prodejní objednávce" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Řádek" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Odkaz na zásilku z prodejní objednávky" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Položka" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Vyberte skladovou položku pro přidělení" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Zadejte množství pro přidělení zásob" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Reference návratové objednávky" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Společnost, od které se vrací položky" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Stav návratové objednávky" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Linkový předmět vratky" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "Zásobní položka musí být specifikována" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "Množství vratky přesahuje množstvní zásob" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "Množstvní vratky musí být více než nula" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Neplatné množství pro sériovou skladovou položku" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Vyberte položku pro vrácení od zákazníka" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Datum přijetí" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "Datum příjetí této vratky" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Výsledek" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Výsledky pro tuto položku" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Vratka extra linka" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "ID objednávky" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID objednávky k duplikaci" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Kopírovat řádky" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Kopírovat řádkové položky z původní objednávky" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Kopírovat extra řádky" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Kopírovat extra řádkové položky z původní objednávky" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Kopírovat parametry" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "Kopírovat parametry objednávky z původní objednávky" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Dokončené řádky" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Duplikovat objednávku" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Specifikujte možnosti pro duplikaci této objednávky" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Neplatné ID objednávky" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Název dodavatele" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Objednávku nelze zrušit" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 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:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "Objednávka má nedokončené řádkové položky" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Objednávka není otevřena" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Automatická cena" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Měna nákupní ceny" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Sloučit položky" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Číslo zboží (SKU)" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Interní číslo dílu" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Interní název dílu" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Musí být uveden díl dodavatele" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Objednávka musí být zadána" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Dodavatel musí odpovídat objednávce" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Objednávka musí odpovídat dodavateli" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Řádková položka" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Vyberte cílové umístění pro přijaté položky" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Zadat kód šarže pro příchozí skladové položky" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum expirace" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "Zadejte datum expirace pro příchozí skladové položky" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Zadat sériová čísla pro příchozí skladové položky" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Přepsat informace o obalu pro příchozí skladové položky" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Dodatečná poznámka pro příchozí skladové položky" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Čárový kód" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Naskenovaný čárový kód" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Tento čárový kód se již používá" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Musí být uvedeny řádkové položky" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Místo určení musí být specifikováno" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Hodnoty dodaných čárových kódů musí být unikátní" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Zásilky" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Dokončené zásilky" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "Přidělené řádky" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Měna prodejní ceny" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Přidělené položky" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Nebyly poskytnuty žádné údaje o zásilce" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 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:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Množství musí být kladné" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "Skladová položka neprošla všemi požadovanými testy" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Zadejte sériová čísla pro přidělení" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Zásilka již byla odeslána" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Zásilka není spojena s touto objednávkou" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Nebyla nalezena žádná shoda pro následující sériová čísla" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Následující sériová čísla nejsou k dispozici" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Řádkový předmět vratky" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Řádková položka neodpovídá vratce" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Řádková položka již byla přijata" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Množství k vrácení" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Měna ceny řádku" @@ -5756,59 +5829,63 @@ msgstr "Je revizí" msgid "Has Revisions" msgstr "Má revize" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "Kusovník schválen" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "Kaskádové kategorie" -#: part/api.py:963 +#: part/api.py:980 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:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtrovat podle numerického ID kategorie nebo doslovného 'null'" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "Sestavený díl je aktivní" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "Sestavený díl je sledovatelný" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "Sestavený díl je testovatelný" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "Sestavený díl je uzamčen" + +#: part/api.py:1316 msgid "Component part is active" msgstr "Kompotenta je aktivní" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "Komponenta je sledovatelná" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Díl komponenty je testovatelný" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "Komponenta je část sestavy" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "Komponenta je virtuální" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "Má dostupné zásoby" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Využití" @@ -5821,7 +5898,7 @@ msgstr "Kategorie dílu" msgid "Part Categories" msgstr "Kategorie dílů" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Výchozí umístění" @@ -5849,7 +5926,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:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikona (volitelná)" @@ -5870,984 +5947,1012 @@ msgstr "Výchozí hodnota" msgid "Default Parameter Value" msgstr "Výchozí hodnota parametru" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Díly" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Nelze odstranit parametry zamčeného dílu" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Nelze upravit parametry zamčeného dílu" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Tento díl nelze smazat, protože je uzamčen" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Tento díl nelze odstanit, protože je stále aktivní" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Tento díl nelze odstranit, protože je použit v sestavě" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Díl '{self}' nelze použít v kusovníku '{parent}' (rekurzivní)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Díl '{parent}' je využit v kusovníku '{self}' (rekurzivní)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN musí odpovídat regex vzoru {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "Díl nemůže být revize same sebe" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "Kód revize musí být specifikován pro díl označený jako revize" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Revize jsou povoleny pouze pro sestavy" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Nelze provést revizi šablony" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "Nadřazený díl musí odkazovat na stejnou šablonu" -#: part/models.py:901 +#: part/models.py:902 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:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplicitní IPN není povoleno v nastavení dílu" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "Duplicitní díl revize již existuje." -#: part/models.py:1054 +#: part/models.py:1055 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:1069 +#: part/models.py:1070 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:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Název dílu" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Je šablonou" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Je tento díl šablona?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Je tento díl varianta jiného dílu?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Varianta" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Popis dílu (nepovinné)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Klíčová slova" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Klíčová slova dílu pro zlepšení vyhledávání" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Kategorie dílu" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interní číslo dílu (IPN)" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Číslo revize nebo verze dílu" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revize" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Je tento díl revizí jiného dílu?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Revize" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Kde je tato položka obvykle skladněna?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Výchozí expirace" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimální zásoby na skladě" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Minimální povolená úroveň zásob" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "Maximální zásoby" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "Maximální povolená úroveň zásob" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Měrné jednotky pro tento díl" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Lze tento díl sestavit z jiných dílů?" -#: part/models.py:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Lze u tohoto dílu sledovat jednotlivé položky?" -#: part/models.py:1266 +#: part/models.py:1276 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:1272 +#: part/models.py:1282 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:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Lze tento díl prodávat zákazníkům?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Je tento díl aktivní?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Uzamčené díly nelze upravit" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "Kusovník ověřen" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "Je kusovník pro tuto část platný?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Kontrolní součet kusovníku" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Uložený kontrolní součet kusovníku" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Kusovník zkontroloval" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Datum kontroly kusovníku" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Vytváření uživatele" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Vlastník odpovědný za tento díl" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Prodat více" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Měna použitá pro výpočet cen v mezipaměti" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Minimální cena kusovníku" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Minimální cena komponent dílu" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Maximální cena kusovníku" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Maximální cena komponent dílu" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Minimální nákupní cena" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Minimální historická nákupní cena" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Maximální nákupní cena" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Maximální historická nákupní cena" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Minimální interní cena" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Minimální cena závislá na množstevní slevě" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Maximální interní cena" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Maximální cena závislá na množstevní slevě" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Minimální cena dodavatele" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Minimální cena dílu od externích dodavatelů" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Maximální cena dodavatele" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Maximální cena dílu od externích dodavatelů" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Minimální cena variant" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Vypočítané minimální náklady na varianty dílů" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Maximální cena variant" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Vypočítané maximální náklady na varianty dílů" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Minimální cena" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Přepsat minimální náklady" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Maximální cena" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Přepsat maximální náklady" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Vypočítané minimální celkové náklady" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Vypočítané maximální celkové náklady" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Minimální prodejní cena" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Minimální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Maximální prodejní cena" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Maximální prodejní cena na základě cenových zvýhodnění" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Minimální prodejní cena" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Minimální historická prodejní cena" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Maximální prodejní cena" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Maximální historická prodejní cena" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Díl na inventuru" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Počet položek" -#: part/models.py:3477 +#: part/models.py:3487 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:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Celkové dostupné zásoby v době inventury" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Datum" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Datum provedení inventury" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Minimální cena zásob" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Odhadovaná minimální cena zásob k dispozici" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Maximální cena zásob" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Odhadovaná maximální cena zásob k dispozici" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Částeční sleva v ceně" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Šablona testu položky" -#: part/models.py:3655 +#: part/models.py:3665 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:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "Zkušební šablony lze vytvořit pouze pro testovatelné části" -#: part/models.py:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Název testu" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Zadejte název testu" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Testovací klíč" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Zjednodušený klíč pro testování" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Popis testu" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Zadejte popis pro tento test" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Je tento test povolen?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Požadováno" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Je tato zkouška vyžadována k projití?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Požadovaná hodnota" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Vyžaduje přílohu" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Platné volby pro tento test (oddělené čárkami)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "Neplatné množství - nebyly zadány žádné jedotky pro tento díl" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "Množství musí být větší nebo rovno nule" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "Položku kusovníku nelze změnit - sestava je uzamčena" -#: part/models.py:3968 +#: part/models.py:4030 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:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Vyberte nadřazený díl" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Poddílec" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Vyberte díl které bude použit v kusovníku" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "Množství" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "Množství pod-dílů spotřebované při výrobě jednoho dílu" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Kusovníkové množství pro tuto kusovníkovou položku" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Tato položka kusovníku je nepovinná" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "Nastavit množství" -#: part/models.py:4021 +#: part/models.py:4091 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:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "Přirozené ztráty" -#: part/models.py:4031 +#: part/models.py:4101 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:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "Zaokrouhlení více" -#: part/models.py:4044 +#: part/models.py:4114 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:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Reference položky kusovníku" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Poznámky k položce kusovníku" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Kontrolní součet" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Kontrolní součet řádku kusovníku" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Schváleno" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Tato položka kusovníku ještě nebyla schválena" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Se zdědí" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "Množství musí být celé číslo pro sledovatelné díly" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Poddíl musí být specifikován" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Náhradní položka kusovníku" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Nadřazená položka kusovníku" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Náhradní díl" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Díl 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Díl 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Vyberte související díl" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Poznámka pro tento vztah" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Duplicitní vztah již existuje" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Nadřazená kategorie" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Nadřazená kategorie dílu" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Výsledky" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Počet výsledků zaznamenaných podle této šablony" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Nákupní měna této skladové položky" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "Soubor není obrázek" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Původní díl" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Vyberte původní díl, který má být duplikován" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Kopírovat obrázek" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Kopírovat obrázek z původního dílu" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Kopírovat kusovník" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Kopírovat kusovník z původního dílu" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Kopírovat data parametrů z původního dílu" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Kopírovat poznámky" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Kopírovat poznámky z původního dílu" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Kopírovat testy" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "Kopírovat testovací šablony z původního dílu" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Počáteční skladové množství" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Počáteční skladové místo" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Zadejte počáteční skladové místo pro tento díl" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Vyberte dodavatele (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Vyberte výrobce (nebo nechte prázdné pro přeskočení)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Číslo dílu výrobce" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Vybraná společnost není platný dodavatel" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Vybraná společnost není platný výrobce" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Výrobce dílu se stejným MPN již existuje" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Dodavatelský díl s tímto SKU již existuje" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Název kategorie" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Budova" -#: part/serializers.py:846 +#: part/serializers.py:843 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:853 +#: part/serializers.py:850 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:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Skladové položky" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Revize" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Celkem skladem" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Nezařazené zásoby" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Skladové varianty" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Duplikovat díl" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Kopírovat počáteční data z jiného dílu" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Počáteční zásoby" -#: part/serializers.py:976 +#: part/serializers.py:977 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:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Informace o dodavateli" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Přidat počáteční informace dodavatele pro tento díl" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Kopírovat parametry kategorie" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Kopírovat šablony parametrů z vybrané kategorie dilu" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Stávající obrázek" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Název souboru existujícího obrázku dílu" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Obrázek neexistuje" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Schválit celý kusovník" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Lze postavit" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "Vyžadováno pro výrobní objednávku" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "Přířazeno výrobním objednávkám" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "Vyžadováno pro prodejní objednávky" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "Přiřazeno prodejním objednávkám" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "IPN dílu" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "Popis dílu" -#: part/serializers.py:1338 +#: part/serializers.py:1327 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:1348 +#: part/serializers.py:1337 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:1358 +#: part/serializers.py:1347 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:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "Generovat vstupy inventury" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "Uložit vstupy inventury pro vybrané díly" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "Generovat report" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "Generovat report inventury pro vybrané díly" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Minimální cena" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Přespat vypočítanou hodnotu pro minimální cenu" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Měna minimální ceny" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Maximální cena" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Přespat vypočítanou hodnotu pro maximální cenu" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Měna maximální ceny" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Aktualizovat" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Aktualizovat cenu pro díl" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 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:1563 +#: part/serializers.py:1552 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:1716 -msgid "Quantity must be greater than or equal to zero" -msgstr "Množství musí být větší nebo rovno nule" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" +msgstr "Množství vyžadováno pro tuto položku (může zahrnout jednotky)" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Vybrat nadřazenou sestavu" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Vyberte komponentu dílu" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "Neplatný formát množství" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Vyberte díl pro kopírování kusovníku z" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Odstranit existující data" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Odstranit existující položky kusovníku před kopírováním" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Zahrnout zděděné" -#: part/serializers.py:2006 +#: part/serializers.py:2004 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:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Přeskočit neplatné řádky" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Povolte tuto možnost pro přeskočení neplatných řádků" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Kopírovat náhradní díly" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopírovat náhradní díly při duplikaci položek kusovníku" @@ -7099,15 +7204,15 @@ msgstr "Množství k přidělení" msgid "Label printing failed" msgstr "Tisk štítku se nezdařil" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Chyba při vykreslování štítku do PDF" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Chyba při vykreslování štítku do HTML" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Nejsou k dispozici žádné položky k tisku" @@ -7168,7 +7273,7 @@ msgstr "Poskytuje nativní podporu pro čárové kódy" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "Oznámení o změně dílu" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "Díl '{part.name}' byl spuštěn událostí '{part_action}'" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree tiskárna PDF štítků" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Poskytuje nativní podporu pro tisk PDF štítků" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Režim ladění" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Povolit režim ladění - vrátí HTML místo PDF" @@ -7568,7 +7673,7 @@ msgstr "Rámeček" msgid "Print a border around each label" msgstr "Vytisknout okraj kolem každého štítku" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Na šířku" @@ -8029,7 +8134,7 @@ msgstr "Plugin nepodporuje tisk štítků" msgid "Invalid label dimensions" msgstr "Neplatné rozměry štítku" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Žádné platné položky nebyly k šabloně poskytnuté" @@ -8073,112 +8178,112 @@ msgstr "Připojit k modelu při tisku" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Uložit výstup reportu jako přílohu v instanci propojeného modelu při tisku" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Šablona pro názvy souborů" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Šablona pro generování názvů souborů" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Šablona je povolena" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "Cílový typ modelu pro šablonu" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtry" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Filtry dotazů šablon (čárkou oddělený seznam klíčových=dvojic hodnot)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Vzorový soubor" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Velikost stránky pro PDF reporty" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Vykreslit report v orientaci na šířku" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "Sloučit" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "Vykreslit jeden report proti vybraným položkám" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Report generován ze šablony {self.name}" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "Chyba syntaxe šablony" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "Chyba při vykreslování reportu" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "Chyba při generování reportu" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "Chyba při slučování výstupů reportu" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Šířka [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Šířka štítku zadaná v mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Výška [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Výška štítku uvedená v mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "Chyba při tisku štítků" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Úryvek" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Nahlásit soubor úryvku" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Popis souboru úryvku" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Aktivum" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Nahlásit soubor aktiva" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Popis souboru aktiva" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sériové číslo" @@ -8538,7 +8643,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Skladové umístění" @@ -8546,11 +8651,11 @@ msgstr "Skladové umístění" msgid "Stock Locations" msgstr "Skladová umístění" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Správce" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Vybrat vlastníka" @@ -8558,7 +8663,7 @@ msgstr "Vybrat vlastníka" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Skladové položky nelze umístit přímo do strukturálních skladových umístění, ale lze je umístit do podřízených skladových umístění." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Externí" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "Serializované zásoby nelze odstranit" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "{field} neexistuje" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Díl musí být zadán" -#: stock/models.py:911 +#: stock/models.py:924 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:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Nelze vytvořit skladovou položku pro virtuální díl" -#: stock/models.py:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Položka nemůže patřit sama sobě" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Stavební reference neukazuje na stejný objekt dílu" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Nadřazená skladová položka" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Základní díl" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Kde se tato skladová položka nachází?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Balení, ve kterém je tato skladová položka uložena" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Instalováno v" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Je tato položka nainstalována v jiné položce?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Sériové číslo pro tuto položku" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Kód šarže pro tuto skladovou položku" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Mnižství" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Zdrojová sestavení" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Postavit pro tuto skladovou položku" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Použito v" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Výrobní příkaz, který spotřeboval tuto skladovou položku" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Zdrojová nákupní objednávka" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Nákupní objednávka pro tuto skladovou položku" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Cílová prodejní objednávka" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Odstranit po vyčerpání" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Odstranit tuto skladovou položku po vyčerpání zásob" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Jednotková kupní cena v okamžiku nákupu" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Převedeno na díl" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "Množství přesahuje dostupné zásoby" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Díl není nastaven jako sledovatelný" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Množstvní musí být celé číslo" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Sériové čísla musí být poskytnuta jako seznam" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Množství neodpovídá sériovým číslům" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "Nelze přiřadit zásoby ke strukturálnímu umístění" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Testovací šablona neexistuje" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Skladová položka byla přidělena prodejní objednávce" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Skladová položka je nainstalována v jiné položce" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Skladová položka obsahuje jiné položky" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Skladová položka byla přidělena zákazníkovi" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Skladová položka je ve výrobě" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Serializované zásoby nelze sloučit" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplicitní skladové položky" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Skladové položky musí odkazovat na stejný díl" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "Skladové položky musí odkazovat na stejný díl dodavatele" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Kódy stavu zásob se musí shodovat" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "Sledování skladových položek" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Poznámky k záznamu" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "Výsledek testu skladové položky" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Pro tuto zkoušku musí být uvedena hodnota" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Pro tento test musí být nahrána příloha" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "Neplatná hodnota pro tento test" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Výsledek testu" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Výstupní hodnota testu" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Příloha výsledků testu" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Poznámky testu" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Testovací stanice" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "Identifikátor testovací stanice kde byl test proveden" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Začátek" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "Čas začátku testu" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Ukončeno" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "Čas dokončení testu" @@ -8929,7 +9042,7 @@ msgstr "Zadejte sériová čísla pro nové položky" msgid "Supplier Part Number" msgstr "Číslo dílu dodavatele" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Expirováno" @@ -9466,131 +9579,131 @@ msgstr "Čas posledního použití tokenu" msgid "Revoked" msgstr "Zrušeno" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Nastavení oprávnění" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Zobrazit" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Oprávnění k zobrazení položek" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Přidat" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Oprávnění přidat položky" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Změnit" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Oprávnění k úpravě položek" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Odstranit" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Oprávnění k odstranění položek" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "Bot" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Interní" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Host" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Jazyk" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Preferovaný jazyk uživatele" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Motiv" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Nastavení webového rozhraní jako JSON - neupravujte ručně!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Widgety" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "Nastavení widgetů hlavního panelu jako JSON - neupravujte ručně!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Zobrazované jméno" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Zvolené zobrazované jméno pro uživatele" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Pozice" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "Název nebo funkce hlavního zaměstnání" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Zpráva statusu uživatele" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "Informace o umístění uživatele" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "Uživatel aktivně používá systém" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "Upřednostňované kontaktní údaje pro uživatele" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Typ uživatele" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "Jaký typ uživatele to je?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Organizace" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "Primární organizace / přidružení uživatelů" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Primární skupina" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "Primární skupina uživatele" diff --git a/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/da/LC_MESSAGES/django.po index 7c2c76c934..8934869d8d 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:09\n" "Last-Translator: \n" "Language-Team: Danish\n" "Language: da_DK\n" @@ -89,6 +89,7 @@ msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Ugyldigt antal angivet" @@ -104,11 +105,11 @@ msgstr "Angiv dato" msgid "Invalid decimal value" msgstr "Ugyldig decimalværdi" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Forbindelsesfejl" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Serveren svarede med ugyldig statuskode" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Der opstod en fejl" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarede med ugyldig Content-Length værdi" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Billedstørrelsen er for stor" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Billeddownload overskred maksimumstørrelsen" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Fjernserver returnerede tomt svar" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Angivet URL er ikke en gyldig billedfil" @@ -219,7 +220,7 @@ msgstr "Log ind på appen" msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "Reference skal matche det påkrævede mønster" msgid "Reference number is too large" msgstr "Referencenummer er for stort" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Ugyldigt valg" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Beskrivelse (valgfri)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown noter (valgfri)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Stregkode Data" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Tredjeparts stregkode data" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Stregkode Hash" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Unik hash af stregkode data" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Eksisterende stregkode fundet" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Serverfejl" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "En fejl blev logget af serveren." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Skal være et gyldigt tal" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Vælg valuta fra tilgængelige muligheder" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Dette felt kan ikke være tomt." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Ugyldig værdi" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Eksternt billede" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL til ekstern billedfil" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Download af billeder fra ekstern URL er ikke aktiveret" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "Ugyldig fysisk enhed" msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Ordre status" @@ -561,21 +546,21 @@ msgstr "Ordre status" msgid "Parent Build" msgstr "Overordnet produktion" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -605,7 +590,7 @@ msgstr "Kategori" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Tildelt til Mig" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produktion skal anulleres, før den kan slettes" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Forbrugsvare" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Valgfri" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "Sporet" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Ordre Udestående" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Allokeret" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Produktionsordre" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Lokation" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Produktionsordre reference" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Produktions Status" msgid "Build status code" msgstr "Produktions statuskode" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batch Kode" @@ -870,8 +855,8 @@ msgstr "Batch Kode" msgid "Batch code for this build output" msgstr "Batch kode til dette produktions output" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Oprettelsesdato" @@ -891,7 +876,7 @@ msgstr "Projekteret afslutningsdato" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Dato for afslutning" @@ -907,8 +892,8 @@ msgstr "Udstedt af" msgid "User who issued this build order" msgstr "Bruger som udstedte denne byggeordre" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarlig" @@ -917,12 +902,12 @@ msgstr "Ansvarlig" msgid "User or group responsible for this build order" msgstr "Bruger eller gruppe ansvarlig for denne byggeordre" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Ekstern link" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link til ekstern URL" @@ -934,8 +919,8 @@ msgstr "Bygge Prioritet" msgid "Priority of this build order" msgstr "Prioritet af denne byggeordre" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Projektkode" @@ -968,7 +953,7 @@ msgstr "En byggeordre er fuldført" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "Antal" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagervarer" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Kilde lagervare" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Del Navn" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" @@ -1156,8 +1141,8 @@ msgstr "Automatisk alloker serienumre" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienumre findes allerede eller er ugyldige" @@ -1245,7 +1230,7 @@ msgstr "Accepter at lagervarer ikke er fuldt tildelt til denne byggeordre" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Accepter ufuldført" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "Varen skal være på lager" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgængeligt antal ({q}) overskredet" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Byg" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leverandør Del" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Stykliste Del" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "I Produktion" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Ekstern Lager" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Tilgængelig Lager" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "Ingen plugin" msgid "Project Code Label" msgstr "Projekt Kode Label" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Opdateret" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Unik projekt kode" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Projektbeskrivelse" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Værdien skal være en boolsk værdi" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Værdi skal være et heltalsværdi" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Skal være et gyldigt tal" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Værdien består ikke valideringskontrol" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Nøglestrengen skal være unik" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Bruger" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Pris" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token for adgang" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Hemmelighed" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Besked ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Vært" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Vært, hvorfra denne meddelelse blev modtaget" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Overskrift" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Overskrift for denne besked" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Titel" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Tilknytning" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Publiceret" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Forfatter" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Opsummering" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Læs" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Blev dette nyhedselement læst?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Billedfil" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Vedhæftning" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Manglende fil" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Manglende eksternt link" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Vælg fil, der skal vedhæftes" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Filstørrelse" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Filstørrelse i bytes" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Værdi" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "Numerisk værdi, der vil blive gemt i modeldatabasen" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Farve" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Farve der vil blive vist på frontend" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Model" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Låst" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Parameter skabelon navn skal være unikt" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Stregkode Scan" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Stregkode data" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Sendt" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Fejlede" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Leveret" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Bekræftet" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Indkommende" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Udgående" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Intet Svar" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Spor Levering" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Spor Læst" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Spor Klik" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3096 +#: common/models.py:3171 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:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "Tråd ID" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "E-mail Tråd" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "E-mail Tråde" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 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:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "Filnavn" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "Valuta Opdaterings Interval" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Maksimum tilladte downloadstørrelse for fjernbillede" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Afsendt" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/de/LC_MESSAGES/django.po index af696de318..227a6855f3 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: German\n" "Language: de_DE\n" @@ -89,6 +89,7 @@ msgstr "Konnte {original} nicht in {unit} umwandeln" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Keine gültige Menge" @@ -104,11 +105,11 @@ msgstr "Datum eingeben" msgid "Invalid decimal value" msgstr "Ungültiger Dezimalwert" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Verbindungsfehler" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Server antwortete mit ungültigem Statuscode" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Ausnahme aufgetreten" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Server antwortete mit ungültigem Wert für die Inhaltslänge" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Bild ist zu groß" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Bilddownload überschreitet maximale Größe" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Remote-Server gab leere Antwort zurück" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Angegebene URL ist kein gültiges Bild" @@ -219,7 +220,7 @@ msgstr "Bei der App anmelden" msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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." @@ -263,124 +264,108 @@ msgstr "Referenz muss erforderlichem Muster entsprechen" msgid "Reference number is too large" msgstr "Referenznummer ist zu groß" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Ungültige Auswahl" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Name" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Beschreibung" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Beschreibung (optional)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Pfad" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Doppelte Namen können nicht unter dem selben Elternteil existieren" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown Notizen (optional)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Barcode-Daten" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Drittanbieter-Barcode-Daten" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Barcode-Hash" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Eindeutiger Hash der Barcode-Daten" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Bestehender Barcode gefunden" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Serverfehler" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Ein Fehler wurde vom Server protokolliert." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Muss eine gültige Nummer sein" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Währung" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Währung aus verfügbaren Optionen auswählen" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Dieses Feld darf nicht leer sein." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Ungültiger Wert" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Grafiken aus externen Quellen" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL der Remote-Bilddatei" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Das Herunterladen von Bildern von Remote-URLs ist nicht aktiviert" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Fehler beim Herunterladen des Bildes von entfernter URL" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "Content type stimmt nicht mit der benötigten Mixin-Klasse überein" @@ -552,8 +537,8 @@ msgstr "Ungültige physikalische Einheit" msgid "Not a valid currency code" msgstr "Kein gültiger Währungscode" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Bestellstatus" @@ -561,21 +546,21 @@ msgstr "Bestellstatus" msgid "Parent Build" msgstr "Eltern-Bauauftrag" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Varianten einschließen" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Varianten einschließen" msgid "Part" msgstr "Teil" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategorie" @@ -605,7 +590,7 @@ msgstr "Kategorie" msgid "Ancestor Build" msgstr "Vorgänger-Build" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Mir zugewiesen" @@ -653,11 +638,11 @@ msgstr "Abgeschlossen vor" msgid "Completed after" msgstr "Abgeschlossen nach" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "Baum ausschließen" msgid "Build must be cancelled before it can be deleted" msgstr "Bauauftrag muss abgebrochen werden, bevor er gelöscht werden kann" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Verbrauchsmaterial" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Optional" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Baugruppe" @@ -687,32 +672,32 @@ msgstr "Baugruppe" msgid "Tracked" msgstr "Nachverfolgt" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Prüfbar" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Offene Bestellung" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Zugeordnet" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Verbraucht" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Bestellt" @@ -720,7 +705,7 @@ msgstr "Bestellt" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Bauauftrag" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Lagerort" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Bauprodukt" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Bauauftragsreferenz" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Bauauftrags-Status" msgid "Build status code" msgstr "Bau-Statuscode" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Losnummer" @@ -870,8 +855,8 @@ msgstr "Losnummer" msgid "Batch code for this build output" msgstr "Losnummer für dieses Endprodukt" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Erstelldatum" @@ -891,7 +876,7 @@ msgstr "geplantes Fertigstellungsdatum" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Zieldatum für Bauauftrag-Fertigstellung." -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Fertigstellungsdatum" @@ -907,8 +892,8 @@ msgstr "Aufgegeben von" msgid "User who issued this build order" msgstr "Nutzer der diesen Bauauftrag erstellt hat" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Verantwortlicher Benutzer" @@ -917,12 +902,12 @@ msgstr "Verantwortlicher Benutzer" msgid "User or group responsible for this build order" msgstr "Benutzer oder Gruppe verantwortlich für diesen Bauauftrag" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Externer Link" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link zu einer externen URL" @@ -934,8 +919,8 @@ msgstr "Bauauftrags-Priorität" msgid "Priority of this build order" msgstr "Priorität dieses Bauauftrags" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Projektcode" @@ -968,7 +953,7 @@ msgstr "Ein Bauauftrag wurde fertiggestellt" msgid "Serial numbers must be provided for trackable parts" msgstr "Seriennummern müssen für nachverfolgbare Teile angegeben werden" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "kein Endprodukt angegeben" @@ -980,47 +965,47 @@ msgstr "Endprodukt bereits hergstellt" msgid "Build output does not match Build Order" msgstr "Endprodukt stimmt nicht mit dem Bauauftrag überein" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Anzahl muss größer Null sein" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Menge kann nicht größer als die Ausgangsmenge sein" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Bauauftragsposition" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Objekt bauen" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Objekt bauen" msgid "Quantity" msgstr "Anzahl" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Erforderliche Menge für Auftrag" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Ausgewählter Lagerbestand stimmt nicht mit BOM-Linie überein" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Anzahl muss 1 für Objekte mit Seriennummer sein" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "BestandObjekt ist zu oft zugewiesen" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagerartikel" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Quell-Lagerartikel" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Anzahl an Lagerartikel dem Bauauftrag zuweisen" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Installiere in" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Ziel-Lagerartikel" @@ -1099,7 +1084,7 @@ msgstr "Ziel-Lagerartikel" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Name des Teils" @@ -1135,7 +1120,7 @@ msgstr "Ganzzahl für verfolgbare Teile erforderlich" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Seriennummer" @@ -1156,8 +1141,8 @@ msgstr "Seriennummern automatisch zuweisen" msgid "Automatically allocate required items with matching serial numbers" msgstr "Benötigte Lagerartikel automatisch mit passenden Seriennummern zuweisen" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Die folgenden Seriennummern existieren bereits oder sind ungültig" @@ -1245,7 +1230,7 @@ msgstr "Akzeptieren, dass Lagerartikel diesem Bauauftrag nicht vollständig zuge msgid "Required stock has not been fully allocated" msgstr "Benötigter Bestand wurde nicht vollständig zugewiesen" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Unvollständig Zuweisung akzeptieren" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part muss auf dasselbe Teil verweisen wie der Bauauftrag" msgid "Item must be in stock" msgstr "Teil muss auf Lager sein" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Verfügbare Menge ({q}) überschritten" @@ -1306,7 +1291,7 @@ msgstr "Für Zuweisung von verfolgten Teilen muss ein Endprodukt angegeben sein" 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Zuweisungen müssen angegeben werden" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Zusammenbau" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Zuliefererteil" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "Teilkategorienname" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Nachverfolgbar" @@ -1412,29 +1397,29 @@ msgstr "Nachverfolgbar" msgid "Inherited" msgstr "Vererbt" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Varianten zulassen" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Stücklisten-Position" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "In Produktion" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Geplant zum Erstellen" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Externes Lager" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Verfügbarer Bestand" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "Benutzer hat keine Berechtigung zum Löschen der Anhänge" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Benutzer hat keine Berechtigung zum Löschen des Anhangs" @@ -1554,610 +1543,634 @@ msgstr "Kein Plugin" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Aktualisiert" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Zeitstempel der letzten Aktualisierung" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Eindeutiger Projektcode" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Projektbeschreibung" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Benutzer oder Gruppe verantwortlich für dieses Projekt" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Einstellungs-Wert" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Wert ist keine gültige Option" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Wahrheitswert erforderlich" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Nur Ganzzahl eingeben" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Schlüsseltext muss eindeutig sein" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Benutzer" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Preisstaffelungs Anzahl" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Preis" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Stückpreis für die angegebene Anzahl" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Endpunkt" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Endpunkt, an dem dieser Webhook empfangen wird" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Name für diesen Webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Ist dieser Webhook aktiv" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token für Zugang" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Geheimnis" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Shared Secret für HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Nachrichten-ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Eindeutige Kennung für diese Nachricht" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Host" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Host von dem diese Nachricht empfangen wurde" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Kopfzeile" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Header dieser Nachricht" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Body" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Body dieser Nachricht" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Endpunkt, über den diese Nachricht empfangen wurde" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Bearbeitet" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Wurde die Arbeit an dieser Nachricht abgeschlossen?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "ID" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Titel" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Veröffentlicht" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Zusammenfassung" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Gelesen" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Wurde diese Nachricht gelesen?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Bilddatei" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Benutzerdefinierte Einheit" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Einheitensymbol muss eindeutig sein" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Einheitsname muss eine gültige Kennung sein" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Einheitsname" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Optionales Einheitssymbol" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definition" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Einheitsdefinition" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Anhang" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Fehlende Datei" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Fehlender externer Link" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Modelltyp" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Datei zum Anhängen auswählen" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Upload Datum" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Datum der hochgeladenen Datei" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Dateigröße" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Dateigröße in Bytes" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ungültiger Modelltyp für Anhang angegeben" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Wert" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Name des Bundeslandes" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Bezeichnung" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Bezeichnung, die im Frontend angezeigt wird" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Farbe" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Farbe, die im Frontend angezeigt wird" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 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:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Auswahlliste" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Auswahllisten" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Name der Auswahlliste" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Beschreibung der Auswahlliste" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Gesperrt" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Ist diese Auswahlliste gesperrt?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Kann diese Auswahlliste benutzt werden?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Standardeintrag" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Erstellt" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Zuletzt aktualisiert" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Parameter Vorlage" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Checkbox-Parameter können keine Einheiten haben" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox-Parameter können keine Auswahl haben" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Auswahl muss einzigartig sein" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Vorlagen-Name des Parameters muss eindeutig sein" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Name des Parameters" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Einheiten" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Physikalische Einheiten für diesen Parameter" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Parameter-Beschreibung" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Ist dieser Parameter eine Checkbox?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Auswahlmöglichkeiten" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gültige Optionen für diesen Parameter (durch Kommas getrennt)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Aktiviert" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Ungültige Auswahl für Parameterwert" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Vorlage" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Wert" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Parameter Wert" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Parameter Wert" msgid "Note" msgstr "Notiz" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Optionales Notizfeld" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Zeitstempel" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Kontext" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Ergebnis" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Angekündigt" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Gesendet" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Fehlgeschlagen" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Zugestellt" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Bestätigt" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Eingehend" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Ausgehend" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Keine Rückmeldung" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 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:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Artikel erhalten" @@ -2457,7 +2470,7 @@ msgstr "Dateiname" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Modelltyp" @@ -2601,13 +2614,13 @@ msgstr "Währungsaktualisierungsintervall" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "Tage" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Zu verwendendes Währungs-Aktualisierungs-Plugin" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Von URL herunterladen" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Download-Größenlimit" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Maximal zulässige Größe für heruntergeladene Bilder" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "Benutzer-Agent zum Herunterladen von Daten" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Strenge URL-Prüfung" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Erfordert die Schema-Spezifikation bei der Validierung von URLs" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Prüfungsintervall aktualisieren" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automatische Sicherung" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Automatische Sicherung der Datenbank- und Mediendateien aktivieren" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Intervall für automatische Sicherung" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Anzahl der Tage zwischen automatischen Sicherungen" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Aufgabenlöschinterval" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Löschintervall für Fehlerprotokolle" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Löschintervall für Benachrichtigungen" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Bacode-Feature verwenden" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "Barcode-Scanner Unterstützung im Webinterface aktivieren" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Barcode-Eingabeverzögerung" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Verzögerungszeit bei Barcode-Eingabe" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Barcode Webcam-Unterstützung" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode-Scannen über Webcam im Browser erlauben" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Artikelrevisionen" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Revisions-Feld für Artikel aktivieren" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Löschen aus Baugruppe erlauben" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "RegEx Muster für die Zuordnung von Teil-IPN" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Mehrere Artikel mit gleicher IPN erlaubt" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Ändern von IPN erlaubt" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Teil-Stückliste kopieren" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Teil-Parameter kopieren" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Teil-Testdaten kopieren" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Kategorie-Parametervorlage kopieren" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "Kategorie-Parameter Vorlagen kopieren wenn ein Teil angelegt wird" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Teile sind standardmäßig Vorlagen" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponente" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "Teile können standardmäßig in Baugruppen benutzt werden" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Kaufbar" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Artikel sind grundsätzlich kaufbar" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Verkäuflich" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Artikel sind grundsätzlich verkaufbar" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Artikel sind grundsätzlich verfolgbar" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuell" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Teile sind grundsätzlich virtuell" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Verwandte Teile anzeigen" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Verwandte Teile eines Teils anzeigen" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Initialer Lagerbestand" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Initiale Lieferantendaten" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Anzeigeformat für Teilenamen" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Format für den Namen eines Teiles" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Standardsymbol der Teilkategorie" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "Standardsymbol der Teilkategorie (leer bedeutet kein Symbol)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Dezimalstellen für minimalen Preis" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Dezimalstellen für maximalen Preis" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Zulieferer-Preise verwenden" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Lieferanten-Staffelpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Kaufverlauf überschreiben" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische Bestellungspreise überschreiben die Lieferanten-Staffelpreise" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Lagerartikel-Preis verwenden" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Lagerartikelpreis Alter" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Variantenpreise verwenden" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenpreise in die Gesamt-Preisberechnungen einbeziehen" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Nur aktive Varianten" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "Nur aktive Variantenteile zur Berechnung der Variantenbepreisung verwenden" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Intervall für Neuberechnung von Preisen" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Interne Preise" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Interne Preise für Teile aktivieren" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Interne Preisüberschreibung" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "Falls verfügbar, überschreiben interne Preise Preispannenberechnungen" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Labeldruck aktivieren" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Labeldruck über die Website aktivieren" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Label Bild DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Berichte aktivieren" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Berichterstellung aktivieren" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Entwickler-Modus" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Berichte im Entwickler-Modus generieren (als HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Berichtsfehler protokollieren" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Fehler, die beim Erstellen von Berichten auftreten, protokollieren" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Seitengröße" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Standardseitenformat für PDF-Bericht" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Parameter Einheiten durchsetzen" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Global einzigartige Seriennummern" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "Seriennummern für Lagerartikel müssen global eindeutig sein" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Erschöpften Lagerartikel löschen" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "Legt das Standardverhalten fest, wenn ein Lagerartikel aufgebraucht ist" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Losnummer Vorlage" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Bestands-Ablauf" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Ablaufen von Bestand ermöglichen" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Abgelaufenen Bestand verkaufen" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Verkauf von abgelaufenem Bestand erlaubt" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Bestands-Stehzeit" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Abgelaufenen Bestand verbauen" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Verbauen von abgelaufenen Bestand erlaubt" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Bestands-Eigentümerkontrolle" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Eigentümerkontrolle für Lagerorte und Teile aktivieren" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Standardsymbol für Lagerort" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Standardsymbol für Lagerstandort (leer bedeutet kein Symbol)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Zeige installierte Lagerartikel" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Anzeige der installierten Lagerartikel in Bestandstabellen" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Prüfe BOM bei der Installation von Elementen" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Erlaube Verschieben von \"nicht auf Lager\" Bestand" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Bauauftragsreferenz-Muster" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Verantwortlicher Besitzer erforderlich" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Jeder Bestellung muss ein verantwortlicher Besitzer zugewiesen werden" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blockieren bis Test bestanden" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Als versendet markierte Aufträge werden automatisch abgeschlossen und überspringen den Status \"Versandt\"" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Bestellungsreferenz-Muster" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Abgeschlossene Einkaufsaufträge bearbeiten" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Bestellungen automatisch abschließen" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Passwort vergessen aktivieren" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Passwort-vergessen-Funktion auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Registrierung erlauben" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "Selbstregistrierung für Benutzer auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "SSO aktivieren" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "SSO auf den Anmeldeseiten aktivieren" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "SSO Selbstregistrierung aktivieren" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "SSO Gruppensynchronisation aktivieren" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSO Gruppenschlüssel" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email-Adresse erforderlich" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Benutzer müssen bei der Registrierung eine E-Mail angeben" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "SSO-Benutzer automatisch ausfüllen" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "Benutzer-Details automatisch aus SSO-Konto ausfüllen" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "E-Mail zweimal" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Passwort zweimal" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "Bei der Registrierung den Benutzer zweimal nach dem Passwort fragen" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Erlaubte Domains" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Gruppe bei Registrierung" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "MFA erzwingen" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Benutzer müssen Multifaktor-Authentifizierung verwenden." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Plugins beim Start prüfen" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Nach Plugin-Aktualisierungen suchen" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Periodische Überprüfungen auf Updates für installierte Plugins aktivieren" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "URL-Integration aktivieren" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Plugins zum Hinzufügen von URLs aktivieren" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Navigations-Integration aktivieren" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Plugins zur Integration in die Navigation aktivieren" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "App-Integration aktivieren" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Plugins zum Hinzufügen von Apps aktivieren" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Terminplan-Integration aktivieren" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Geplante Aufgaben aktivieren" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Ereignis-Integration aktivieren" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Plugins ermöglichen auf interne Ereignisse zu reagieren" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Externe Standorte ausschließen" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Automatische Inventur-Periode" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Vollständige Namen von Benutzern anzeigen" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Vollständigen Namen von Benutzern anstatt Benutzername anzeigen" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Teststation-Daten aktivieren" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "Teststation-Datenerfassung für Testergebnisse aktivieren" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "Zuletzt verwendete Druckmaschinen" msgid "Save the last used printing machines for a user" msgstr "Die zuletzt benutzten Druckmaschinen für einen Benutzer speichern" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "Internes Teil ist aktiv" msgid "Supplier is Active" msgstr "Lieferant ist aktiv" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Hersteller" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Kontakt-Email" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontakt" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adresse" @@ -4203,12 +4268,12 @@ msgstr "Versandnotizen für interne Verwendung" msgid "Link to address information (external)" msgstr "Link zu Adressinformationen (extern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Herstellerteil" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Basisteil" @@ -4221,8 +4286,8 @@ msgstr "Teil auswählen" msgid "Select manufacturer" msgstr "Hersteller auswählen" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN" @@ -4250,8 +4315,8 @@ msgstr "Packeinheiten müssen größer als Null sein" msgid "Linked manufacturer part must reference the same base part" msgstr "Verlinktes Herstellerteil muss dasselbe Basisteil referenzieren" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Zulieferer" msgid "Select supplier" msgstr "Zulieferer auswählen" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Lagerbestandseinheit (SKU) des Zulieferers" @@ -4290,15 +4355,15 @@ msgstr "Teil-URL des Zulieferers" msgid "Supplier part description" msgstr "Zuliefererbeschreibung des Teils" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "Basiskosten" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Mindestpreis" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Verpackungen" @@ -4315,7 +4380,7 @@ msgstr "Packmenge" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "Vielfache" @@ -4339,23 +4404,23 @@ msgstr "Datum des letzten Updates der Verfügbarkeitsdaten" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Standard-Währung für diesen Zulieferer" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Firmenname" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Auf Lager" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "Fehler" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Gültig" @@ -4623,7 +4688,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:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Unbekannt" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Gruppe" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Bestellreferenz" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Ausstehend" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Erstellt von" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Hat Preise" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Bestellung" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Bestellung abgeschlossen" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Internes Teil" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Bestellung ausstehend" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Fertig" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Bestellung" msgid "Sales Order" msgstr "Auftrag" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Gesamtpreis" msgid "Total price for this order" msgstr "Gesamtpreis für diese Bestellung" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Auftragswährung" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "Währung für diesen Auftrag (leer lassen, um Firmenstandard zu verwenden)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Auftragsbeschreibung (optional)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Projektcode für diesen Auftrag auswählen" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Link auf externe Seite" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Zieldatum" @@ -4963,12 +5028,12 @@ msgstr "Ansprechpartner für diesen Auftrag" msgid "Company address for this order" msgstr "Firmenadresse für diesen Auftrag" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Bestell-Referenz" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Status" @@ -4992,15 +5057,15 @@ msgstr "Zulieferer Bestellreferenz" msgid "received by" msgstr "Empfangen von" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Datum an dem der Auftrag fertigstellt wurde" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Ziel-Lager" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "Anzahl muss eine positive Zahl sein" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kunde" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Firma an die die Teile verkauft werden" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Kundenreferenz" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Bestellreferenz" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Versanddatum" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "Versand von" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Bestellung ist bereits abgeschlossen" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Bestellung ist bereits storniert" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Nur ein offener Auftrag kann als abgeschlossen markiert werden" -#: order/models.py:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Anzahl" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Position - Referenz" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Position - Notizen" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Positionsbeschreibung (optional)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Zusätzlicher Kontext für diese Zeile" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Stückpreis" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Lieferantenteil muss mit Lieferant übereinstimmen" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Zuliefererteil" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Empfangen" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Empfangene Objekt-Anzahl" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preis" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Preis pro Einheit" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "Nur verkaufbare Teile können einem Auftrag zugewiesen werden" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Verkaufspreis" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Stückverkaufspreis" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Versendet" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Versendete Menge" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Versanddatum" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Lieferdatum" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Versanddatum" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Kontrolliert von" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Benutzer, der diese Sendung kontrolliert hat" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sendung" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Sendungsnummer" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Sendungsverfolgungsnummer" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Informationen zur Sendungsverfolgung" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Rechnungsnummer" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Referenznummer für zugehörige Rechnung" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Sendung wurde bereits versandt" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Sendung hat keine zugewiesene Lagerartikel" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Lagerartikel wurde nicht zugewiesen" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Kann Lagerartikel keiner Zeile ohne Teil hinzufügen" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Die zugeordnete Anzahl darf nicht die verfügbare Anzahl überschreiten" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Reserviermenge muss größer null sein" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Anzahl für serialisierte Lagerartikel muss 1 sein" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Auftrag gehört nicht zu Sendung" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Sendung gehört nicht zu Auftrag" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Position" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Sendungsnummer-Referenz" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Position" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Lagerartikel für Zuordnung auswählen" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Anzahl für Bestandszuordnung eingeben" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Rücksendungsreferenz" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Firma von der die Artikel zurückgeschickt werden" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Status der Rücksendung" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Artikel zur Rücksendung auswählen" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Empfangsdatum" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Ergebnis" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Ergebnis für dieses Zeilenelement" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Parameter kopieren" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Abgeschlossene Positionen" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Lieferant" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Bestellung kann nicht verworfen werden" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Erlaube das Schließen des Auftrags mit unvollständigen Positionen" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "Auftrag hat unvollständige Positionen" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Der Auftrag ist nicht offen" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Automatische Preisgestaltung" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Kaufpreis automatisch basierend auf Lieferantenbestandsdaten berechnen" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Kaufpreiswährung" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Elemente zusammenfügen" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Lieferanten-Teilenummer" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Interne Teilenummer" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Zuliefererteil muss ausgewählt werden" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Bestellung muss angegeben sein" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Lieferant muss mit der Bestellung übereinstimmen" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Die Bestellung muss mit dem Lieferant übereinstimmen" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Position" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Zielort für empfangene Teile auswählen" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Losnummer für eingehende Lagerartikel" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ablaufdatum" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Seriennummern für eingehende Lagerartikel" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Gescannter Barcode" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Barcode ist bereits in Verwendung" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Positionen müssen angegeben werden" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Ziel-Lagerort muss angegeben werden" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Barcode muss eindeutig sein" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Abgeschlossene Sendungen" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Verkaufspreis-Währung" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Keine Sendungsdetails angegeben" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Position ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Anzahl muss positiv sein" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Seriennummern zum Zuweisen eingeben" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Sendung wurde bereits versandt" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Sendung ist nicht diesem Auftrag zugeordnet" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Folgende Serienummern konnten nicht gefunden werden" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Artikel der Bestellzeile zurücksenden" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Artikel entspricht nicht der Rücksendeschrift" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Artikel wurde bereits erhalten" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Verkaufspreis-Währung" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Verwendet" @@ -5821,7 +5898,7 @@ msgstr "Teil-Kategorie" msgid "Part Categories" msgstr "Teil-Kategorien" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Standard-Lagerort" @@ -5849,7 +5926,7 @@ msgstr "Standard-Stichworte für Teile dieser Kategorie" msgid "Icon" msgstr "Symbol" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Symbol (optional)" @@ -5870,984 +5947,1012 @@ msgstr "Standard-Wert" msgid "Default Parameter Value" msgstr "Standard Parameter Wert" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Teile" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Dieses Teil kann nicht gelöscht werden, da es noch aktiv ist" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Dieses Teil kann nicht gelöscht werden, da es in einem Bauauftrag verwendet wird" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Teil '{self}' kann in der Stückliste nicht für '{parent}' (rekursiv) verwendet werden" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Teil '{parent}' wird in der Stückliste für '{self}' (rekursiv) verwendet" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN muss mit Regex-Muster {pattern} übereinstimmen" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Ein Lagerartikel mit dieser Seriennummer existiert bereits" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Doppelte IPN in den Teil-Einstellungen nicht erlaubt" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Teil mit diesem Namen, IPN und Revision existiert bereits." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Strukturellen Teilekategorien können keine Teile zugewiesen werden!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Name des Teils" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Ist eine Vorlage" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Ist dieses Teil eine Vorlage?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Ist dieses Teil eine Variante eines anderen Teils?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variante von" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Artikelbeschreibung (optional)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Schlüsselwörter" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Schlüsselworte um die Sichtbarkeit in Suchergebnissen zu verbessern" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Teile-Kategorie" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Interne Produktnummer)" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Revisions- oder Versionsnummer" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Version" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Revision von" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Standard Ablaufzeit" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "Ablauf-Zeit (in Tagen) für Bestand dieses Teils" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimaler Bestand" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Minimal zulässiger Bestand" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Maßeinheit für diesen Teil" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Kann dieses Teil aus anderen Teilen angefertigt werden?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "Kann dieses Teil zum Bauauftrag von anderen genutzt werden?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Hat dieses Teil Tracking für einzelne Objekte?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "Kann dieses Teil von externen Zulieferern gekauft werden?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Kann dieses Teil an Kunden verkauft werden?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Ist dieses Teil aktiv?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Prüfsumme der Stückliste gespeichert" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Stückliste kontrolliert von" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "BOM Kontrolldatum" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Erstellungs-Nutzer" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Verantwortlicher Besitzer für dieses Teil" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Mehrere verkaufen" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Währung für die Berechnung der Preise im Cache" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Minimale Stücklisten Kosten" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Minimale Kosten für Teile" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Maximale Stücklisten Kosten" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Maximale Kosten für Teile" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Minimale Einkaufskosten" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Minimale historische Kaufkosten" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Maximale Einkaufskosten" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Maximale historische Einkaufskosten" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Minimaler interner Preis" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Minimale Kosten basierend auf den internen Staffelpreisen" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Maximaler interner Preis" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Maximale Kosten basierend auf internen Preisstaffeln" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Minimaler Lieferantenpreis" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Mindestpreis für Teil von externen Lieferanten" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Maximaler Lieferantenpreis" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Maximaler Preis für Teil von externen Lieferanten" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Minimale Variantenkosten" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Berechnete minimale Kosten für Variantenteile" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Maximale Variantenkosten" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Berechnete maximale Kosten für Variantenteile" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Minimale Kosten" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Mindestkosten überschreiben" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Maximale Kosten" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Maximale Kosten überschreiben" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Berechnete Mindestkosten" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Berechnete Maximalkosten" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Mindestverkaufspreis" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Mindestverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Maximaler Verkaufspreis" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Maximalverkaufspreis basierend auf Staffelpreisen" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Mindestverkaufskosten" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Minimaler historischer Verkaufspreis" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Maximale Verkaufskosten" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Maximaler historischer Verkaufspreis" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Teil für die Inventur" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Stückzahl" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Anzahl einzelner Bestandseinträge zum Zeitpunkt der Inventur" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Insgesamt verfügbarer Lagerbestand zum Zeitpunkt der Inventur" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Datum" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Datum der Inventur" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Mindestbestandswert" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Geschätzter Mindestwert des vorhandenen Bestands" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Maximaler Bestandswert" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Geschätzter Maximalwert des vorhandenen Bestands" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 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:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Test-Name" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Namen für diesen Test eingeben" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Testschlüssel" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Vereinfachter Schlüssel zum Test" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Test-Beschreibung" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Beschreibung für diesen Test eingeben" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Ist dieser Test aktiviert?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Benötigt" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Muss dieser Test erfolgreich sein?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Erfordert Wert" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Anhang muss eingegeben werden" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Gültige Optionen für diesen Test (durch Komma getrennt)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Ausgangsteil auswählen" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Untergeordnetes Teil" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Teil für die Nutzung in der Stückliste auswählen" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Stücklisten-Anzahl für dieses Stücklisten-Teil" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Diese Stücklisten-Position ist optional" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Referenz der Postion auf der Stückliste" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Notizen zur Stücklisten-Position" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Prüfsumme" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Prüfsumme der Stückliste" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "überprüft" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Diese Stücklistenposition wurde validiert" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Wird vererbt" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "Menge muss eine Ganzzahl sein" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Zuliefererteil muss festgelegt sein" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Stücklisten Ersatzteile" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "Ersatzteil kann nicht identisch mit dem Hauptteil sein" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Übergeordnete Stücklisten Position" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Ersatzteil" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Teil 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Teil 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "verknüpftes Teil auswählen" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Doppelte Beziehung existiert bereits" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Übergeordnete Kategorie" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Übergeordnete Teilkategorie" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Unter-Kategorien" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Ergebnisse" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Anzahl der Ergebnisse, die in dieser Vorlage aufgezeichnet wurden" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Kaufwährung dieses Lagerartikels" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Originalteil" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Originalteil zum Duplizieren auswählen" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Bild kopieren" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Bild vom Originalteil kopieren" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Stückliste kopieren" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Stückliste vom Originalteil kopieren" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Parameterdaten vom Originalteil kopieren" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Anmerkungen kopieren" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Notizen aus Originalteil kopieren" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Start-Bestandsmenge" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Initialer Lagerort" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Lagerstandort für dieses Teil angeben" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Lieferant auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Hersteller auswählen (oder leer lassen, um zu überspringen)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Hersteller-Teilenummer" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Ausgewählte Firma ist kein gültiger Lieferant" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Ausgewählte Firma ist kein gültiger Hersteller" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Herstellerteil mit dieser MPN existiert bereits" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Lieferantenteil mit dieser SKU existiert bereits" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Kategoriename" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Im Bau" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Lagerartikel" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Gesamtbestand" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Nicht zugewiesenes Lager" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Alternatives Lager" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Teil duplizieren" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Initiale Daten von anderem Teil kopieren" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Initialer Lagerbestand" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Erstelle Teil mit Ausgangsbestand" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Lieferanteninformationen" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Lieferanteninformationen zu diesem Teil hinzufügen" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Kategorieparameter kopieren" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Parametervorlagen aus der ausgewählten Teilkategorie kopieren" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Vorhandenes Bild" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Dateiname eines vorhandenen Teilbildes" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Bilddatei existiert nicht" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Gesamte Stückliste validieren" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Herstellbar" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Niedrigster Preis" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Berechneten Wert für Mindestpreis überschreiben" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Mindestpreis Währung" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Höchster Preis" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Berechneten Wert für maximalen Preis überschreiben" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Maximalpreis Währung" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Aktualisieren" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Preis für dieses Teil aktualisieren" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "Mindestpreis darf nicht größer als der Maximalpreis sein" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "Der Maximalpreis darf nicht kleiner als der Mindestpreis sein" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Teil auswählen, von dem Stückliste kopiert wird" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Bestehende Daten entfernen" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Bestehende Stücklisten-Positionen vor dem Kopieren entfernen" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Vererbtes einschließen" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "Stücklisten-Positionen einbeziehen, die von Vorlage-Teilen geerbt werden" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Ungültige Zeilen überspringen" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Aktiviere diese Option, um ungültige Zeilen zu überspringen" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Ersatzteile kopieren" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Ersatzteile beim Duplizieren von Stücklisten-Positionen kopieren" @@ -7099,15 +7204,15 @@ msgstr "Zugewiesene Menge" msgid "Label printing failed" msgstr "Labeldruck fehlgeschlagen" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Fehler beim Rendern des Etikett als PDF" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Fehler beim Rendern des Etikett als HTML" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Keine Elemente zum Drucken übergeben" @@ -7168,7 +7273,7 @@ msgstr "Bietet native Unterstützung für Barcodes" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF-Etikettendrucker" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Bietet native Unterstützung für das Drucken von PDF-Etiketten" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Debug-Modus" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Debug-Modus aktivieren - gibt Roh-HTML statt PDF zurück" @@ -7568,7 +7673,7 @@ msgstr "Rand" msgid "Print a border around each label" msgstr "Einen Rahmen um jedes Label drucken" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Querformat" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Dateinamen-Muster" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filter" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Seitengröße für PDF-Berichte" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Bericht in Querformat anzeigen" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Breite [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Label-Breite in mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Höhe [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Label-Höhe in mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Schnipsel" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Berichts-Snippet" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Snippet-Beschreibung" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Ressource" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Berichts-Ressource" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Ressource-Beschreibung" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seriennummer" @@ -8538,7 +8643,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Bestand-Lagerort" @@ -8546,11 +8651,11 @@ msgstr "Bestand-Lagerort" msgid "Stock Locations" msgstr "Bestand-Lagerorte" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Besitzer" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Besitzer auswählen" @@ -8558,7 +8663,7 @@ msgstr "Besitzer auswählen" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Lagerartikel können nicht direkt an einen strukturellen Lagerort verlegt werden, können aber an einen untergeordneten Lagerort verlegt werden." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Extern" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagerartikel können nicht in strukturelle Lagerorte abgelegt werden!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Für virtuelle Teile können keine Lagerartikel erstellt werden" -#: stock/models.py:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "Anzahl muss für Objekte mit Seriennummer 1 sein" -#: stock/models.py:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Teil kann nicht zu sich selbst gehören" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Referenz verweist nicht auf das gleiche Teil" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Eltern-Lagerartikel" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Basis-Teil" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "Passendes Zuliefererteil für diesen Lagerartikel auswählen" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Wo wird dieses Teil normalerweise gelagert?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Verpackung, in der dieser Lagerartikel gelagert ist" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "verbaut in" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Ist dieses Teil in einem anderen verbaut?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Seriennummer für dieses Teil" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Losnummer für diesen Lagerartikel" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Bestand" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Quellbau" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Bauauftrag für diesen Lagerartikel" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Verbraucht von" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Bauauftrag der diesen Lagerartikel verbrauchte" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Quelle Bestellung" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Bestellung für diesen Lagerartikel" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Ziel-Auftrag" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Löschen wenn leer" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Diesen Lagerartikel löschen wenn der Bestand aufgebraucht ist" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Preis für eine Einheit bei Einkauf" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "In Teil umgewandelt" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Teil ist nicht verfolgbar" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Anzahl muss eine Ganzzahl sein" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Anzahl stimmt nicht mit den Seriennummern überein" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Testvorlage existiert nicht" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Artikel wurde einem Kundenauftrag zugewiesen" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Lagerartikel ist in anderem Element verbaut" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Lagerartikel enthält andere Artikel" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Artikel wurde einem Kunden zugewiesen" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Lagerartikel wird aktuell produziert" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Nachverfolgbare Lagerartikel können nicht zusammengeführt werden" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artikel duplizeren" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Lagerartikel müssen auf dasselbe Teil verweisen" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "Lagerartikel müssen auf dasselbe Lieferantenteil verweisen" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Status-Codes müssen zusammenpassen" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Eintrags-Notizen" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Wert muss für diesen Test angegeben werden" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Anhang muss für diesen Test hochgeladen werden" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Testergebnis" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Test Ausgabe Wert" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Test Ergebnis Anhang" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Test Notizen" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Teststation" -#: stock/models.py:3087 +#: stock/models.py:3111 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:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Gestartet" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "Der Zeitstempel des Teststarts" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Fertiggestellt" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "Der Zeitstempel der Test-Beendigung" @@ -8929,7 +9042,7 @@ msgstr "Seriennummern für neue Teile eingeben" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "abgelaufen" @@ -9466,131 +9579,131 @@ msgstr "Das letzte Mal, wo das Token verwendet wurde" msgid "Revoked" msgstr "Widerrufen" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Berechtigung geändert" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Ansicht" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Berechtigung Einträge anzuzeigen" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Hinzufügen" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Berechtigung Einträge zu erstellen" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Ändern" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Berechtigungen Einträge zu ändern" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Löschen" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Berechtigung Einträge zu löschen" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Interne" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Gast" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Sprache" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Bevorzugte Sprache für diesen Benutzer" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Name anzeigen" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Organisation" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/el/LC_MESSAGES/django.po index bba720c3df..e09355a9ea 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el_GR\n" @@ -89,6 +89,7 @@ msgstr "Δεν ήταν δυνατή η μετατροπή από {original} σ #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Μη έγκυρη ποσότητα" @@ -104,11 +105,11 @@ msgstr "Εισάγετε ημερομηνία" msgid "Invalid decimal value" msgstr "Μη έγκυρη δεκαδική τιμή" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Σφάλμα σύνδεσης" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Ο διακομιστής απάντησε με μη έγκυρο κωδικό κατάστασης" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Προέκυψε σφάλμα" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Ο διακομιστής ανταποκρίθηκε με \"Invalid Content-Length value\"" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Η εικόνα είναι πολύ μεγάλη σε μέγεθος" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Η λήψη εικόνας ξεπέρασε το μέγιστο μέγεθος" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Ο διακομιστής επέστρεψε σφάλμα %1$d %2$s" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Το URL δεν είναι έγκυρο αρχείο εικόνας" @@ -219,7 +220,7 @@ msgstr "Σύνδεση στην εφαρμογή" msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Πρέπει να ενεργοποιήσετε τον έλεγχο ταυτότητας δύο παραγόντων πριν κάνετε οτιδήποτε άλλο." @@ -263,124 +264,108 @@ msgstr "Η αναφορά πρέπει να ταιριάζει με το απα msgid "Reference number is too large" msgstr "Ο αριθμός αναφοράς είναι πολύ μεγάλος" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Μη έγκυρη επιλογή" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Όνομα" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Περιγραφή" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Περιγραφή (προαιρετική)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Μονοπάτι" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Διπλότυπα ονόματα δεν μπορούν να υπάρχουν στον ίδιο γονέα" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Σημειώσεις Markdown (προαιρετικό)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Στοιχεία Barcode" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Δεδομένα barcode τρίτων" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hash barcode" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Μοναδικό hash δεδομένων barcode" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Βρέθηκε υπάρχων barcode" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Σφάλμα διακομιστή" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Ένα σφάλμα έχει καταγραφεί από το διακομιστή." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Πρέπει να είναι αριθμός" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Νόμισμα" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Επιλέξτε νόμισμα από τις διαθέσιμες επιλογές" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Μη έγκυρη τιμή" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Απομακρυσμένες Εικόνες" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "Διεύθυνση URL του αρχείου απομακρυσμένης εικόνας" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Η λήψη εικόνων από απομακρυσμένο URL δεν είναι ενεργοποιημένη" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Αποτυχία λήψης εικόνας από απομακρυσμένο URL" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "Μη έγκυρη φυσική μονάδα" msgid "Not a valid currency code" msgstr "Μη έγκυρος κωδικός συναλλάγματος" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Κατάσταση παραγγελίας" @@ -561,21 +546,21 @@ msgstr "Κατάσταση παραγγελίας" msgid "Parent Build" msgstr "Γονική Κατασκευή" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Συμπερίληψη παραλλαγών" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Συμπερίληψη παραλλαγών" msgid "Part" msgstr "Εξάρτημα" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Κατηγορία" @@ -605,7 +590,7 @@ msgstr "Κατηγορία" msgid "Ancestor Build" msgstr "Πρόγονος κατασκευής" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Ανατεθειμένες σε εμένα" @@ -653,11 +638,11 @@ msgstr "Ολοκληρώθηκε πριν από" msgid "Completed after" msgstr "Ολοκληρώθηκε μετά από" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Ελάχιστη ημερομηνία" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Μέγιστη ημερομηνία" @@ -669,16 +654,16 @@ msgstr "Εξαίρεση δέντρου" msgid "Build must be cancelled before it can be deleted" msgstr "Η έκδοση πρέπει να ακυρωθεί πριν διαγραφεί" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Αναλώσιμο" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Προαιρετικό" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Συναρμολόγηση" @@ -687,32 +672,32 @@ msgstr "Συναρμολόγηση" msgid "Tracked" msgstr "Υπό παρακολούθηση" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Υπό δοκιμή" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Εκκρεμής παραγγελία" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Κατανεμημένο" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Καταναλωμένο" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Σε παραγγελία" @@ -720,7 +705,7 @@ msgstr "Σε παραγγελία" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Σειρά Κατασκευής" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Τοποθεσία" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Έξοδος" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Αναφορά Παραγγελίας Κατασκευής" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Κατάσταση Κατασκευής" msgid "Build status code" msgstr "Κωδικός κατάστασης κατασκευής" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Κωδικός Παρτίδας" @@ -870,8 +855,8 @@ msgstr "Κωδικός Παρτίδας" msgid "Batch code for this build output" msgstr "Κωδικός παρτίδας για αυτήν την κατασκευή" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Ημερομηνία Δημιουργίας" @@ -891,7 +876,7 @@ msgstr "Ημερομηνία ολοκλήρωσης στόχου" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Ημερομηνία ολοκλήρωσης της κατασκευής. Η κατασκευή θα καθυστερήσει μετά από αυτή την ημερομηνία." -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Ημερομηνία ολοκλήρωσης" @@ -907,8 +892,8 @@ msgstr "Εκδόθηκε από" msgid "User who issued this build order" msgstr "Χρήστης που εξέδωσε αυτήν την παραγγελία κατασκευής" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Υπεύθυνος" @@ -917,12 +902,12 @@ msgstr "Υπεύθυνος" msgid "User or group responsible for this build order" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτή την εντολή κατασκευής" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Εξωτερικοί σύνδεσμοι" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Σύνδεσμος προς εξωτερική διεύθυνση URL" @@ -934,8 +919,8 @@ msgstr "Προτεραιότητα Κατασκευής" msgid "Priority of this build order" msgstr "Προτεραιότητα αυτής της εντολής κατασκευής" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Κωδικός Έργου" @@ -968,7 +953,7 @@ msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθ msgid "Serial numbers must be provided for trackable parts" msgstr "Πρέπει να δοθούν σειριακοί αριθμοί για τα ανιχνεύσιμα Προϊόντα" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Δεν καθορίστηκε έξοδος κατασκευής" @@ -980,47 +965,47 @@ msgstr "Η παραγγελία κατασκευής έχει ολοκληρωθ msgid "Build output does not match Build Order" msgstr "Η έξοδος κατασκευής δεν ταιριάζει με την παραγγελία κατασκευής" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Η ποσότητα δεν μπορεί να είναι μεγαλύτερη από την παραγόμενη ποσότητα" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "Η έξοδος κατασκευής δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Το προϊόν κατασκευής {serial} δεν έχει περάσει όλες τις απαιτούμενες δοκιμές" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "Δεν είναι δυνατή η μερική ολοκλήρωση προϊόντος κατασκευής με δεσμευμένα στοιχεία" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Γραμμή εντολής κατασκευής" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Αντικείμενο κατασκευής" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Αντικείμενο κατασκευής" msgid "Quantity" msgstr "Ποσότητα" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Απαιτούμενη ποσότητα για την εντολή κατασκευής" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Ποσότητα καταναλωμένου αποθέματος" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Το στοιχείο κατασκευής πρέπει να ορίζει μια έξοδο κατασκευής, καθώς το κύριο τμήμα επισημαίνεται ως ανιχνεύσιμο" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Το επιλεγμένο στοιχείο αποθέματος δεν ταιριάζει με τη γραμμή ΤΥ" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριακό απόθεμα" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Η καταχωρημένη ποσότητα ({q}) δεν πρέπει να υπερβαίνει τη διαθέσιμη ποσότητα αποθέματος ({a})" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Στοιχείο αποθέματος είναι υπερ-κατανεμημένο" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Στοιχείο Αποθέματος" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Στοιχείο πηγαίου αποθέματος" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Ποσότητα αποθέματος για διάθεση για κατασκευή" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Εγκατάσταση σε" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Αποθήκη προορισμού" @@ -1099,7 +1084,7 @@ msgstr "Αποθήκη προορισμού" msgid "Build Level" msgstr "Επίπεδο κατασκευής" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Όνομα Προϊόντος" @@ -1135,7 +1120,7 @@ msgstr "Ακέραιη ποσότητα που απαιτείται για αν msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Ακέραιη ποσότητα που απαιτείται, καθώς ο λογαριασμός των υλικών περιέχει ανιχνεύσιμα μέρη" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Σειριακοί αριθμοί" @@ -1156,8 +1141,8 @@ msgstr "Αυτόματη Κατανομή Σειριακών Αριθμών" msgid "Automatically allocate required items with matching serial numbers" msgstr "Αυτόματη κατανομή των απαιτούμενων στοιχείων με τους αντίστοιχους σειριακούς αριθμούς" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Οι παρακάτω σειριακοί αριθμοί υπάρχουν ήδη ή δεν είναι έγκυροι" @@ -1245,7 +1230,7 @@ msgstr "Αποδεχτείτε ότι αντικείμενα αποθέματο msgid "Required stock has not been fully allocated" msgstr "Το απαιτούμενο απόθεμα δεν έχει δεσμευτεί πλήρως" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Αποδοχή Μη Ολοκληρωμένων" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part πρέπει να δείχνει στο ίδιο εξάρ msgid "Item must be in stock" msgstr "Το στοιχείο πρέπει να υπάρχει στο απόθεμα" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Η διαθέσιμη ποσότητα ({q}) έχει ξεπεραστεί" @@ -1306,7 +1291,7 @@ msgstr "Πρέπει να καθοριστεί έξοδος κατασκευής msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Δεν μπορεί να καθοριστεί έξοδος κατασκευής για την κατανομή μη ανιχνεύσιμων Προϊόντων" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Πρέπει να δοθούν στοιχεία κατανομής" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Κατασκευή" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Aντικειμένου προμηθευτή" @@ -1404,7 +1389,7 @@ msgstr "Αναφορά κατασκευής" msgid "Part Category Name" msgstr "Όνομα κατηγορίας Προϊόντος" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Ανιχνεύσιμο" @@ -1412,29 +1397,29 @@ msgstr "Ανιχνεύσιμο" msgid "Inherited" msgstr "Κληρονομημένο" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Να επιτρέπονται παραλλαγές" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Στοιχείο BOM" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "Σε παραγωγή" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Προγραμματισμένο για κατασκευή" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Εξωτερικό απόθεμα" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Διαθέσιμο απόθεμα" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτά τα συνημμένα" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Ο χρήστης δεν έχει δικαίωμα να διαγράψει αυτό το συνημμένο" @@ -1554,610 +1543,634 @@ msgstr "Χωρίς πρόσθετο" msgid "Project Code Label" msgstr "Ετικέτα κωδικού έργου" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Ενημερώθηκε" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Χρονική σήμανση τελευταίας ενημέρωσης" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Ενημερώθηκε από" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Χρήστης που ενημέρωσε τελευταίος αυτό το Aντικειμένου" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Μοναδικός κωδικός έργου" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Περιγραφή έργου" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Χρήστης ή ομάδα υπεύθυνη για αυτό το έργο" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Κλειδί ρυθμίσεων" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Τιμή ρυθμίσεων" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Η επιλεγμένη τιμή δεν είναι έγκυρη επιλογή" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Η τιμή πρέπει να είναι boolean" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Η τιμή πρέπει να είναι ακέραιος αριθμός" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Η τιμή πρέπει να είναι έγκυρος αριθμός" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Η τιμή δεν περνά τους ελέγχους εγκυρότητας" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Η συμβολοσειρά κλειδιού πρέπει να είναι μοναδική" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Χρήστης" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Ποσότητα κλιμακωτής τιμής" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Τιμή" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Τιμή μονάδας στη συγκεκριμένη ποσότητα" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Το endpoint στο οποίο λαμβάνεται αυτό το webhook" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Όνομα για αυτό το webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ενεργό" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Είναι αυτό το webhook ενεργό" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token πρόσβασης" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Μυστικό" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Κοινόχρηστο μυστικό για HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID μηνύματος" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Μοναδικό αναγνωριστικό για αυτό το μήνυμα" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Host" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Host από τον οποίο παραλήφθηκε αυτό το μήνυμα" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Κεφαλίδα" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Κεφαλίδα αυτού του μηνύματος" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Κείμενο" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Κείμενο αυτού του μηνύματος" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Endpoint στο οποίο παραλήφθηκε αυτό το μήνυμα" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Επεξεργάστηκε" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Ολοκληρώθηκε η εργασία σε αυτό το μήνυμα;" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "ID" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Τίτλος" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Σύνδεσμος" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Δημοσιεύθηκε" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Συντάκτης" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Περίληψη" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Αναγνωσμένο" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Διαβάστηκε αυτό το νέο;" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Αρχείο εικόνας" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Τύπος μοντέλου-στόχου για αυτή την εικόνα" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "ID μοντέλου-στόχου για αυτή την εικόνα" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Προσαρμοσμένη μονάδα" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Το σύμβολο μονάδας πρέπει να είναι μοναδικό" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Το όνομα μονάδας πρέπει να είναι έγκυρο αναγνωριστικό" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Όνομα μονάδας" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Σύμβολο" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Προαιρετικό σύμβολο μονάδας" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Ορισμός" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Ορισμός μονάδας" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Συνημμένο" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Το αρχείο λείπει" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Λείπει ο εξωτερικός σύνδεσμος" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Τύπος μοντέλου" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Τύπος μοντέλου-στόχου για την εικόνα" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Επιλέξτε αρχείο για επισύναψη" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Σχόλιο" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Σχόλιο συνημμένου" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Ημερομηνία μεταφόρτωσης" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Ημερομηνία μεταφόρτωσης του αρχείου" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Μέγεθος αρχείου" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Μέγεθος αρχείου σε bytes" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Μη έγκυρος τύπος μοντέλου που ορίστηκε για το συνημμένο" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Προσαρμοσμένη κατάσταση" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Προσαρμοσμένες καταστάσεις" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Σετ κατάστασης αναφοράς" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Σετ καταστάσεων που επεκτείνεται με αυτή την προσαρμοσμένη κατάσταση" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Λογικό κλειδί" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "Λογικό κλειδί κατάστασης που είναι ισοδύναμο με αυτή την προσαρμοσμένη κατάσταση στη λογική της εφαρμογής" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Τιμή" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "Αριθμητική τιμή που θα αποθηκευτεί στη βάση δεδομένων των μοντέλων" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Όνομα της κατάστασης" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Ετικέτα" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Ετικέτα που θα εμφανίζεται στο frontend" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Χρώμα" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Χρώμα που θα εμφανίζεται στο frontend" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Μοντέλο" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Μοντέλο με το οποίο συσχετίζεται αυτή η κατάσταση" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Πρέπει να επιλεγεί μοντέλο" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Πρέπει να επιλεγεί κλειδί" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Πρέπει να επιλεγεί λογικό κλειδί" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "Το κλειδί πρέπει να είναι διαφορετικό από το λογικό κλειδί" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Πρέπει να δοθεί έγκυρη κλάση κατάστασης αναφοράς" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "Το κλειδί πρέπει να είναι διαφορετικό από τα λογικά κλειδιά της κατάστασης αναφοράς" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "Το λογικό κλειδί πρέπει να ανήκει στα λογικά κλειδιά της κατάστασης αναφοράς" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "Το όνομα πρέπει να είναι διαφορετικό από τα ονόματα της κατάστασης αναφοράς" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Λίστα επιλογών" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Λίστες επιλογών" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Όνομα της λίστας επιλογών" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Περιγραφή της λίστας επιλογών" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Κλειδωμένο" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Είναι αυτή η λίστα επιλογών κλειδωμένη;" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Μπορεί να χρησιμοποιηθεί αυτή η λίστα επιλογών;" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Πρόσθετο πηγής" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Πρόσθετο που παρέχει τη λίστα επιλογών" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Συμβολοσειρά πηγής" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "Προαιρετική συμβολοσειρά που ταυτοποιεί την πηγή που χρησιμοποιείται για αυτή τη λίστα" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Προεπιλεγμένη καταχώρηση" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Προεπιλεγμένη καταχώρηση για αυτή τη λίστα επιλογών" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Δημιουργήθηκε" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "Ημερομηνία και ώρα δημιουργίας της λίστας επιλογών" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Τελευταία ενημέρωση" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης της λίστας επιλογών" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Καταχώρηση λίστας επιλογών" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Καταχωρήσεις λίστας επιλογών" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Λίστα επιλογών στην οποία ανήκει αυτή η καταχώρηση" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Τιμή της καταχώρησης λίστας επιλογών" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Ετικέτα για την καταχώρηση λίστας επιλογών" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Περιγραφή της καταχώρησης λίστας επιλογών" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Είναι ενεργή αυτή η καταχώρηση λίστας επιλογών;" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Πρότυπο παραμέτρου" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν μονάδες" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Οι παράμετροι τύπου checkbox δεν μπορούν να έχουν επιλογές" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Οι επιλογές πρέπει να είναι μοναδικές" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Το όνομα προτύπου παραμέτρου πρέπει να είναι μοναδικό" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Όνομα παραμέτρου" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Μονάδες" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Φυσικές μονάδες για αυτή την παράμετρο" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Περιγραφή παραμέτρου" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Checkbox" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Είναι αυτή η παράμετρος τύπου checkbox;" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Επιλογές" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή την παράμετρο (διαχωρισμένες με κόμμα)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Λίστα επιλογών για αυτή την παράμετρο" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Ενεργό" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Μη έγκυρη επιλογή για την τιμή παραμέτρου" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Πρότυπο" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Δεδομένα" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Τιμή παραμέτρου" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Τιμή παραμέτρου" msgid "Note" msgstr "Σημείωση" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Προαιρετικό πεδίο σημείωσης" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Σάρωση barcode" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Δεδομένα barcode" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Χρήστης που σάρωσε το barcode" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Χρονική σήμανση" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Ημερομηνία και ώρα της σάρωσης barcode" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "URL endpoint που επεξεργάστηκε το barcode" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Πλαίσιο" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Δεδομένα πλαισίου για τη σάρωση barcode" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Απόκριση" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Δεδομένα απόκρισης από τη σάρωση barcode" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Αποτέλεσμα" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "Ήταν επιτυχημένη η σάρωση barcode;" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Παρουσιάστηκε σφάλμα" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "Μήνυμα email" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "Μηνύματα email" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Ανακοινώθηκε" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Εστάλη" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Απέτυχε" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Παραδόθηκε" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Επιβεβαιώθηκε" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Εισερχόμενο" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Εξερχόμενο" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Χωρίς απάντηση" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Παρακολούθηση παράδοσης" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Παρακολούθηση ανάγνωσης" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Παρακολούθηση κλικ" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το μήνυμα (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "ID νήματος" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Αναγνωριστικό για αυτό το νήμα μηνυμάτων (ενδέχεται να παρέχεται από εξωτερικό σύστημα)" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Νήμα" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Συνδεδεμένο νήμα για αυτό το μήνυμα" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "Νήμα email" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "Νήματα email" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Κλειδί" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "Μοναδικό κλειδί για αυτό το νήμα (χρησιμοποιείται για την ταυτοποίησή του)" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Μοναδικό αναγνωριστικό για αυτό το νήμα" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Ξεκίνησε εσωτερικά" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Ξεκίνησε αυτό το νήμα εσωτερικά;" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Ημερομηνία και ώρα δημιουργίας του νήματος" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Ημερομηνία και ώρα της τελευταίας ενημέρωσης του νήματος" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Είδη που παραλήφθηκαν" @@ -2457,7 +2470,7 @@ msgstr "Όνομα αρχείου" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Τύπος μοντέλου" @@ -2601,13 +2614,13 @@ msgstr "Διάστημα ενημέρωσης νομισμάτων" msgid "How often to update exchange rates (set to zero to disable)" msgstr "Κάθε πότε θα ενημερώνονται οι συναλλαγματικές ισοτιμίες (0 για απενεργοποίηση)" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "ημέρες" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Πρόσθετο ενημέρωσης νομισμάτων που θα χρησιμοποιηθεί" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Λήψη από URL" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "Να επιτρέπεται η λήψη απομακρυσμένων εικόνων και αρχείων από εξωτερικό URL" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "Όριο μεγέθους λήψης" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Μέγιστο επιτρεπόμενο μέγεθος λήψης για απομακρυσμένη εικόνα" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "User-agent που χρησιμοποιείται για λήψη από URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Αυστηρή επικύρωση URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Να απαιτείται ορισμός σχήματος κατά την επικύρωση URL" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Διάστημα ελέγχου ενημερώσεων" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "Κάθε πότε θα γίνεται έλεγχος για ενημερώσεις (0 για απενεργοποίηση)" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Αυτόματο αντίγραφο ασφαλείας" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Ενεργοποίηση αυτόματου backup της βάσης δεδομένων και των media αρχείων" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Διάστημα αυτόματου backup" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Ορίστε τον αριθμό ημερών μεταξύ των αυτόματων backup" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Διάστημα διαγραφής εργασιών" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "Τα αποτελέσματα εργασιών παρασκηνίου θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Διάστημα διαγραφής log σφαλμάτων" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "Τα log σφαλμάτων θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Διάστημα διαγραφής ειδοποιήσεων" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "Οι ειδοποιήσεις χρηστών θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "Διάστημα διαγραφής email" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "Τα μηνύματα email θα διαγράφονται μετά από τον καθορισμένο αριθμό ημερών" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "Προστασία log email" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "Αποτροπή διαγραφής εγγραφών log email" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Υποστήριξη barcode" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "Ενεργοποίηση υποστήριξης σαρωτή barcode στο web interface" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Αποθήκευση αποτελεσμάτων barcode" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "Αποθήκευση των αποτελεσμάτων σάρωσης barcode στη βάση δεδομένων" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Μέγιστος αριθμός σαρώσεων barcode" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "Μέγιστος αριθμός αποτελεσμάτων σάρωσης barcode που θα αποθηκεύονται" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Καθυστέρηση εισόδου barcode" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Χρόνος καθυστέρησης επεξεργασίας εισόδου barcode" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Υποστήριξη barcode μέσω webcam" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "Να επιτρέπεται σάρωση barcode μέσω webcam στο πρόγραμμα περιήγησης" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Εμφάνιση δεδομένων barcode" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Εμφάνιση των δεδομένων barcode στο πρόγραμμα περιήγησης ως κείμενο" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Πρόσθετο δημιουργίας barcode" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "Πρόσθετο που θα χρησιμοποιείται για εσωτερική δημιουργία δεδομένων barcode" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Εκδόσεις Προϊόντων" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Ενεργοποίηση πεδίου έκδοσης για Aντικειμένου" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Μόνο εκδόσεις συναρμολογήσεων" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Να επιτρέπονται εκδόσεις μόνο για Προϊόντα συναρμολόγησης" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Να επιτρέπεται διαγραφή από συναρμολόγηση" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "Να επιτρέπεται η διαγραφή Προϊόντων που χρησιμοποιούνται σε συναρμολόγηση" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Πρότυπο regular expression για αντιστοίχιση IPN Προϊόντος" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Να επιτρέπονται διπλά IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Να επιτρέπεται σε πολλαπλά Προϊόντα να μοιράζονται το ίδιο IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Να επιτρέπεται η επεξεργασία IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "Να επιτρέπεται η αλλαγή της τιμής IPN κατά την επεξεργασία ενός Προϊόντος" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Αντιγραφή δεδομένων BOM Προϊόντος" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων BOM από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Αντιγραφή δεδομένων παραμέτρων Προϊόντος" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων παραμέτρων από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Αντιγραφή δεδομένων δοκιμών Προϊόντος" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "Αντιγραφή δεδομένων δοκιμών από προεπιλογή κατά τον διπλασιασμό ενός Προϊόντος" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "Αντιγραφή προτύπων παραμέτρων κατηγορίας κατά τη δημιουργία Προϊόντος" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Τα Προϊόντα είναι πρότυπα από προεπιλογή" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "Τα Προϊόντα μπορούν να συναρμολογούνται από άλλα συστατικά από προεπιλογή" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Συστατικό" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "Τα Προϊόντα μπορούν να χρησιμοποιούνται ως υποσυστατικά από προεπιλογή" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Αγοράσιμο" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Τα Προϊόντα είναι αγοράσιμα από προεπιλογή" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Πωλήσιμο" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Τα Προϊόντα είναι πωλήσιμα από προεπιλογή" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Τα Προϊόντα είναι ανιχνεύσιμα από προεπιλογή" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Εικονικό" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Τα Προϊόντα είναι εικονικά από προεπιλογή" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Εμφάνιση σχετικών Προϊόντων" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Εμφάνιση σχετικών Προϊόντων για ένα Aντικειμένου" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Αρχικά δεδομένα αποθέματος" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "Να επιτρέπεται η δημιουργία αρχικού αποθέματος κατά την προσθήκη νέου Προϊόντος" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Αρχικά δεδομένα προμηθευτή" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Να επιτρέπεται η δημιουργία αρχικών δεδομένων προμηθευτή κατά την προσθήκη νέου Προϊόντος" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Μορφή εμφάνισης ονόματος Προϊόντος" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Μορφή με την οποία εμφανίζεται το όνομα του Προϊόντος" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "Προεπιλεγμένο εικονίδιο κατηγορίας Προϊόντος (κενό σημαίνει χωρίς εικονίδιο)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Ελάχιστα δεκαδικά ψηφία τιμολόγησης" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Ελάχιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Μέγιστα δεκαδικά ψηφία τιμολόγησης" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Μέγιστος αριθμός δεκαδικών ψηφίων που θα εμφανίζονται στα δεδομένα τιμολόγησης" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Χρήση τιμών προμηθευτή" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Συμπερίληψη κλιμακωτών τιμών προμηθευτή στους συνολικούς υπολογισμούς τιμών" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Υπέρβαση μέσω ιστορικού αγορών" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Οι ιστορικές τιμές εντολών αγοράς υπερισχύουν των κλιμακωτών τιμών προμηθευτή" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Χρήση τιμολόγησης στοιχείου αποθέματος" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Χρήση τιμών από χειροκίνητα καταχωρημένα δεδομένα αποθέματος για τους υπολογισμούς τιμών" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Ηλικία τιμολόγησης στοιχείου αποθέματος" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Εξαίρεση στοιχείων αποθέματος παλαιότερων από αυτόν τον αριθμό ημερών από τους υπολογισμούς τιμών" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Χρήση τιμολόγησης παραλλαγών" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Συμπερίληψη τιμών παραλλαγών στους συνολικούς υπολογισμούς τιμών" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Μόνο ενεργές παραλλαγές" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "Χρήση μόνο ενεργών Προϊόντων παραλλαγών για τον υπολογισμό τιμών παραλλαγών" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Αυτόματη ενημέρωση τιμών" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "Αυτόματη ενημέρωση τιμών Προϊόντων όταν αλλάζουν τα εσωτερικά δεδομένα" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Διάστημα επαναυπολογισμού τιμών" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "Αριθμός ημερών πριν ενημερωθούν αυτόματα οι τιμές των Προϊόντων" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Εσωτερικές τιμές" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Ενεργοποίηση εσωτερικών τιμών για Προϊόντα" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Υπέρβαση μέσω εσωτερικής τιμής" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "Όταν υπάρχουν, οι εσωτερικές τιμές υπερισχύουν των υπολογισμών εύρους τιμών" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Ενεργοποίηση εκτύπωσης ετικετών" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Ενεργοποίηση εκτύπωσης ετικετών από το web interface" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "DPI εικόνας ετικέτας" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Ανάλυση DPI κατά τη δημιουργία αρχείων εικόνας για πρόσθετα εκτύπωσης ετικετών" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Ενεργοποίηση αναφορών" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Ενεργοποίηση δημιουργίας αναφορών" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Λειτουργία αποσφαλμάτωσης" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Δημιουργία αναφορών σε λειτουργία αποσφαλμάτωσης (έξοδος HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Καταγραφή σφαλμάτων αναφορών" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Καταγραφή σφαλμάτων που προκύπτουν κατά τη δημιουργία αναφορών" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Μέγεθος σελίδας" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Προεπιλεγμένο μέγεθος σελίδας για PDF αναφορές" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Επιβολή μονάδων παραμέτρων" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "Αν δοθούν μονάδες, οι τιμές των παραμέτρων πρέπει να αντιστοιχούν στις καθορισμένες μονάδες" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Καθολικά μοναδικοί σειριακοί αριθμοί" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "Οι σειριακοί αριθμοί των στοιχείων αποθέματος πρέπει να είναι καθολικά μοναδικοί" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Διαγραφή εξαντλημένου αποθέματος" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "Καθορίζει την προεπιλεγμένη συμπεριφορά όταν ένα στοιχείο αποθέματος εξαντλείται" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Πρότυπο κωδικού παρτίδας" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "Πρότυπο για τη δημιουργία προεπιλεγμένων κωδικών παρτίδας για στοιχεία αποθέματος" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Λήξη αποθέματος" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Ενεργοποίηση λειτουργίας λήξης αποθέματος" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Πώληση ληγμένου αποθέματος" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Να επιτρέπεται η πώληση ληγμένου αποθέματος" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Χρόνος απαρχαίωσης αποθέματος" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "Αριθμός ημερών που τα στοιχεία αποθέματος θεωρούνται παλαιωμένα πριν λήξουν" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Κατασκευή με ληγμένο απόθεμα" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Να επιτρέπεται η κατασκευή με ληγμένο απόθεμα" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Έλεγχος ιδιοκτησίας αποθέματος" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Ενεργοποίηση ελέγχου ιδιοκτησίας σε τοποθεσίες και στοιχεία αποθέματος" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Προεπιλεγμένο εικονίδιο τοποθεσίας αποθέματος (κενό σημαίνει χωρίς εικονίδιο)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Εμφάνιση εγκατεστημένων στοιχείων αποθέματος στους πίνακες αποθέματος" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Έλεγχος BOM κατά την εγκατάσταση στοιχείων" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Τα εγκατεστημένα στοιχεία αποθέματος πρέπει να υπάρχουν στο BOM του γονικού Προϊόντος" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Να επιτρέπεται μεταφορά εκτός αποθέματος" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Να επιτρέπεται η μεταφορά στοιχείων αποθέματος που δεν είναι διαθέσιμα μεταξύ τοποθεσιών αποθέματος" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Πρότυπο αναφοράς εντολής κατασκευής" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "Απαιτούμενο πρότυπο για τη δημιουργία του πεδίου αναφοράς εντολής κατασκευής" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Απαίτηση υπεύθυνου κατόχου" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Πρέπει να οριστεί υπεύθυνος ιδιοκτήτης για κάθε παραγγελία" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Απαίτηση ενεργού προϊόντος" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ανενεργά προϊόντα" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Απαίτηση κλειδωμένου προϊόντος" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής για ξεκλείδωτα προϊόντα" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Απαίτηση έγκυρης BOM" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "Αποτροπή δημιουργίας εντολής παραγωγής αν δεν έχει επικυρωθεί η BOM" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Απαίτηση κλειστών θυγατρικών εντολών" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "Αποτροπή ολοκλήρωσης εντολής παραγωγής μέχρι να κλείσουν όλες οι θυγατρικές εντολές" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Εξωτερικές εντολές παραγωγής" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Ενεργοποίηση λειτουργίας εξωτερικών εντολών παραγωγής" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Φραγή έως ότου περάσουν τα τεστ" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Οι εντολές πώλησης που επισημαίνονται ως αποσταλμένες ολοκληρώνονται αυτόματα, παρακάμπτοντας την κατάσταση «απεσταλμένο»" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Μοτίβο αναφοράς εντολής αγοράς" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "Απαιτούμενο μοτίβο για τη δημιουργία του πεδίου αναφοράς εντολής αγοράς" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Επεξεργασία ολοκληρωμένων εντολών αγοράς" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Επιτρέπει την επεξεργασία εντολών αγοράς μετά την αποστολή ή ολοκλήρωσή τους" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Μετατροπή νομίσματος" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "Μετατροπή της αξίας είδους στο βασικό νόμισμα κατά την παραλαβή αποθέματος" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Αυτόματη ολοκλήρωση εντολών αγοράς" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Αυτόματη σήμανση εντολών αγοράς ως ολοκληρωμένων όταν έχουν παραληφθεί όλα τα είδη" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Ενεργοποίηση υπενθύμισης κωδικού" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Ενεργοποίηση λειτουργίας υπενθύμισης κωδικού στις σελίδες σύνδεσης" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Ενεργοποίηση εγγραφής" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "Ενεργοποίηση αυτοεγγραφής χρηστών στις σελίδες σύνδεσης" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Ενεργοποίηση SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Ενεργοποίηση SSO στις σελίδες σύνδεσης" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Ενεργοποίηση εγγραφής μέσω SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Ενεργοποίηση αυτοεγγραφής μέσω SSO στις σελίδες σύνδεσης" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Ενεργοποίηση συγχρονισμού ομάδων SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Ενεργοποίηση συγχρονισμού ομάδων InvenTree με ομάδες από τον IdP" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "Κλειδί ομάδας SSO" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Το όνομα του πεδίου ομάδων που παρέχεται από τον IdP" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "Χάρτης ομάδων SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Αφαίρεση ομάδων εκτός SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Απαίτηση email" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Απαίτηση συμπλήρωσης email κατά την εγγραφή" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Αυτόματη συμπλήρωση χρηστών SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "Αυτόματη συμπλήρωση στοιχείων χρήστη από τα δεδομένα SSO" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Email δύο φορές" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "Κατά την εγγραφή ζητείται το email δύο φορές" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Κωδικός δύο φορές" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "Κατά την εγγραφή ζητείται ο κωδικός δύο φορές" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Επιτρεπόμενοι τομείς" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Περιορισμός εγγραφής σε συγκεκριμένους τομείς (χωρισμένοι με κόμμα, ξεκινούν με @)" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Ομάδα κατά την εγγραφή" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Επιβολή MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Οι χρήστες πρέπει να χρησιμοποιούν πολυπαραγοντική ασφάλεια" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Έλεγχος plugins κατά την εκκίνηση" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Έλεγχος ότι όλα τα plugins είναι εγκατεστημένα κατά την εκκίνηση – χρήσιμο σε container περιβάλλοντα" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Έλεγχος για ενημερώσεις plugin" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Ενεργοποίηση περιοδικών ελέγχων για ενημερώσεις εγκατεστημένων plugins" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Ενεργοποίηση URL integration" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Ενεργοποίηση προσθήκης URL routes από plugins" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Ενεργοποίηση ενσωμάτωσης στην πλοήγηση" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Ενεργοποίηση ενσωμάτωσης των plugins στην πλοήγηση" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Ενεργοποίηση ενσωμάτωσης εφαρμογών" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Ενεργοποίηση προσθήκης εφαρμογών από plugins" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Ενεργοποίηση ενσωμάτωσης χρονοπρογραμματισμού" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Ενεργοποίηση εκτέλεσης χρονοπρογραμματισμένων εργασιών από plugins" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Ενεργοποίηση ενσωμάτωσης γεγονότων" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Ενεργοποίηση απόκρισης plugins σε εσωτερικά γεγονότα" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Ενεργοποίηση ενσωμάτωσης διεπαφής" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Ενεργοποίηση ενσωμάτωσης plugins στη διεπαφή χρήστη" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "Ενεργοποίηση ενσωμάτωσης email" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Ενεργοποίηση επεξεργασίας εισερχόμενων/εξερχόμενων emails από plugins" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Ενεργοποίηση κωδικών έργου" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Ενεργοποίηση κωδικών έργου για την παρακολούθηση projects" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "Ενεργοποίηση καταγραφής ιστορικών επιπέδων και αξιών αποθέματος" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Εξαίρεση εξωτερικών τοποθεσιών" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Περίοδος αυτόματης απογραφής" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Εμφάνιση πλήρους ονόματος χρηστών" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Εμφάνιση του πλήρους ονόματος των χρηστών αντί για το όνομα χρήστη" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Εμφάνιση προφίλ χρηστών" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Εμφάνιση προφίλ χρηστών στη σελίδα προφίλ τους" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Ενεργοποίηση δεδομένων σταθμού δοκιμών" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "Ενεργοποίηση συλλογής δεδομένων σταθμού δοκιμών για τα αποτελέσματα δοκιμών" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "Ενεργοποίηση ping μηχανημάτων" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Ενεργοποίηση περιοδικού ping των καταχωρημένων μηχανημάτων για έλεγχο της κατάστασής τους" @@ -3951,6 +4008,14 @@ msgstr "Τελευταίες χρησιμοποιημένες εκτυπωτικ msgid "Save the last used printing machines for a user" msgstr "Αποθήκευση των τελευταίων εκτυπωτικών μηχανών που χρησιμοποίησε ο χρήστης" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "Το εσωτερικό προϊόν είναι ενεργό" msgid "Supplier is Active" msgstr "Ο προμηθευτής είναι ενεργός" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Κατασκευαστής" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Email επικοινωνίας" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Επαφή" @@ -4111,7 +4176,7 @@ msgstr "ΑΦΜ" msgid "Company Tax ID" msgstr "ΑΦΜ εταιρείας" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Διεύθυνση" @@ -4203,12 +4268,12 @@ msgstr "Σημειώσεις αποστολής για εσωτερική χρή msgid "Link to address information (external)" msgstr "Σύνδεσμος σε πληροφορίες διεύθυνσης (εξωτερικό)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Προϊόν κατασκευαστή" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Βασικό προϊόν" @@ -4221,8 +4286,8 @@ msgstr "Επιλογή προϊόντος" msgid "Select manufacturer" msgstr "Επιλογή κατασκευαστή" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN" @@ -4250,8 +4315,8 @@ msgstr "Οι μονάδες συσκευασίας πρέπει να είναι msgid "Linked manufacturer part must reference the same base part" msgstr "Το συνδεδεμένο προϊόν κατασκευαστή πρέπει να αναφέρεται στο ίδιο βασικό προϊόν" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Προμηθευτής" msgid "Select supplier" msgstr "Επιλογή προμηθευτή" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Κωδικός αποθέματος προμηθευτή" @@ -4290,15 +4355,15 @@ msgstr "URL εξωτερικού συνδέσμου προϊόντος προμ msgid "Supplier part description" msgstr "Περιγραφή προϊόντος προμηθευτή" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "βασικό κόστος" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Ελάχιστη χρέωση (π.χ. χρέωση αποθήκευσης)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Συσκευασία" @@ -4315,7 +4380,7 @@ msgstr "Ποσότητα ανά συσκευασία" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Συνολική ποσότητα που παρέχεται σε μία συσκευασία. Αφήστε κενό για μεμονωμένα είδη." -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "πολλαπλάσιο" @@ -4339,23 +4404,23 @@ msgstr "Ημερομηνία τελευταίας ενημέρωσης δεδο msgid "Supplier Price Break" msgstr "Κλιμακωτή τιμή προμηθευτή" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Προεπιλεγμένο νόμισμα που χρησιμοποιείται για αυτόν τον προμηθευτή" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Όνομα εταιρείας" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Σε απόθεμα" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "Κλιμακωτές τιμές" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Αρχικά δεδομένα γραμμής" msgid "Errors" msgstr "Σφάλματα" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Έγκυρο" @@ -4623,7 +4688,7 @@ msgstr "Αριθμός αντιτύπων προς εκτύπωση για κά msgid "Connected" msgstr "Συνδεδεμένος" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Άγνωστο" @@ -4727,7 +4792,7 @@ msgstr "Κλειδί ιδιότητας" msgid "Value of the property" msgstr "Τιμή ιδιότητας" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Ομάδα" @@ -4751,117 +4816,117 @@ msgstr "Μέγιστη πρόοδος" msgid "Maximum value for progress type, required if type=progress" msgstr "Μέγιστη τιμή για τύπο προόδου, απαιτείται αν type=progress" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Αναφορά παραγγελίας" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Σε εκκρεμότητα" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Έχει κωδικό έργου" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Δημιουργήθηκε από" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Δημιουργήθηκε πριν" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Δημιουργήθηκε μετά" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Έχει ημερομηνία έναρξης" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Ημερομηνία έναρξης πριν" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Ημερομηνία έναρξης μετά" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Έχει ημερομηνία στόχο" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Ημερομηνία στόχος πριν" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Ημερομηνία στόχος μετά" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Έχει τιμολόγηση" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Ολοκληρώθηκε πριν" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Ολοκληρώθηκε μετά" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Εξωτερική εντολή παραγωγής" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Παραγγελία" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Η παραγγελία ολοκληρώθηκε" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Εσωτερικό προϊόν" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Η παραγγελία είναι σε εκκρεμότητα" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Ολοκληρώθηκε" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Έχει αποστολή" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Εντολή αγοράς" msgid "Sales Order" msgstr "Εντολές Πώλησης" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Συνολική τιμή" msgid "Total price for this order" msgstr "Συνολική τιμή για αυτή την παραγγελία" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Νόμισμα παραγγελίας" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "Νόμισμα για αυτή την παραγγελία (αφήστε κενό για χρήση της προεπιλογής εταιρείας)" @@ -4914,11 +4979,11 @@ msgstr "Η διεύθυνση δεν αντιστοιχεί στην επιλε msgid "Order description (optional)" msgstr "Περιγραφή παραγγελίας (προαιρετικά)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Επιλογή κωδικού έργου για αυτή την παραγγελία" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Σύνδεσμος σε εξωτερική σελίδα" @@ -4930,7 +4995,7 @@ msgstr "Ημερομηνία έναρξης" msgid "Scheduled start date for this order" msgstr "Προγραμματισμένη ημερομηνία έναρξης για αυτή την παραγγελία" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Επιθυμητή Προθεσμία" @@ -4963,12 +5028,12 @@ msgstr "Σημείο επαφής για αυτή την παραγγελία" msgid "Company address for this order" msgstr "Διεύθυνση εταιρείας για αυτή την παραγγελία" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Αναφορά παραγγελίας" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Κατάσταση" @@ -4992,15 +5057,15 @@ msgstr "Κωδικός αναφοράς παραγγελίας προμηθευ msgid "received by" msgstr "παραλήφθηκε από" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Ημερομηνία ολοκλήρωσης της παραγγελίας" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Προορισμός" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Προορισμός για τα παραληφθέντα είδη" @@ -5024,616 +5089,624 @@ msgstr "Η ποσότητα πρέπει να είναι θετικός αριθ msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Πελάτης" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Εταιρεία στην οποία πωλούνται τα είδη" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Κατάσταση εντολής πώλησης" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Αναφορά πελάτη " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Κωδικός αναφοράς παραγγελίας πελάτη" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Ημερομηνία αποστολής" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "απεστάλη από" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Η παραγγελία είναι ήδη ολοκληρωμένη" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Η παραγγελία είναι ήδη ακυρωμένη" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Μόνο μια ανοικτή παραγγελία μπορεί να σημειωθεί ως ολοκληρωμένη" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες αποστολές" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες δεσμεύσεις αποθέματος" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "Η παραγγελία δεν μπορεί να ολοκληρωθεί καθώς υπάρχουν μη ολοκληρωμένες γραμμές" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "Η παραγγελία είναι κλειδωμένη και δεν μπορεί να τροποποιηθεί" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Ποσότητα είδους" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Αναφορά γραμμής" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Σημειώσεις γραμμής" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Ημερομηνία στόχος για αυτή τη γραμμή (αφήστε κενό για χρήση της ημερομηνίας στόχου από την παραγγελία)" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Περιγραφή γραμμής (προαιρετικά)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Πρόσθετο πλαίσιο για αυτή τη γραμμή" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Τιμή μονάδας" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Γραμμή εντολής αγοράς" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Το προϊόν προμηθευτή πρέπει να ταιριάζει με τον προμηθευτή" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "Η εντολή παραγωγής πρέπει να έχει σημειωθεί ως εξωτερική" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "Οι εντολές παραγωγής μπορούν να συνδεθούν μόνο με προϊόντα συναρμολόγησης" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "Το προϊόν της εντολής παραγωγής πρέπει να ταιριάζει με το προϊόν της γραμμής" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Προϊόν προμηθευτή" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Παραλήφθηκε" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Αριθμός ειδών που παραλήφθηκαν" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Τιμή αγοράς" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Τιμή μονάδας αγοράς" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "Εξωτερική εντολή παραγωγής που θα καλυφθεί από αυτή τη γραμμή" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Επιπλέον γραμμή εντολής αγοράς" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Γραμμή εντολής πώλησης" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "Μόνο πωλήσιμα προϊόντα μπορούν να αντιστοιχιστούν σε εντολή πώλησης" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Τιμή πώλησης" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Τιμή μονάδας πώλησης" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Αποστάλθηκε" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Ποσότητα που αποστάλθηκε" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Αποστολή εντολής πώλησης" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "Η διεύθυνση αποστολής πρέπει να αντιστοιχεί στον πελάτη" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "Διεύθυνση αποστολής για αυτή την αποστολή" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Ημερομηνία αποστολής" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Ημερομηνία παράδοσης" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Ημερομηνία παράδοσης της αποστολής" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Έλεγχος από" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Χρήστης που έλεγξε αυτή την αποστολή" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Αποστολή" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Αριθμός αποστολής" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Αριθμός παρακολούθησης" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Πληροφορίες παρακολούθησης αποστολής" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Αριθμός τιμολογίου" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Αριθμός αναφοράς του σχετικού τιμολογίου" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Η αποστολή δεν έχει δεσμευμένα είδη αποθέματος" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "Η αποστολή πρέπει να ελεγχθεί πριν μπορέσει να ολοκληρωθεί" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Επιπλέον γραμμή εντολής πώλησης" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Δέσμευση αποθέματος εντολής πώλησης" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Δεν έχει αντιστοιχιστεί είδος αποθέματος" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "Δεν είναι δυνατή η δέσμευση είδους αποθέματος σε γραμμή με διαφορετικό προϊόν" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Δεν είναι δυνατή η δέσμευση αποθέματος σε γραμμή χωρίς προϊόν" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Η ποσότητα δέσμευσης δεν μπορεί να υπερβαίνει την ποσότητα αποθέματος" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Η ποσότητα πρέπει να είναι μεγαλύτερη από 0" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Η ποσότητα πρέπει να είναι 1 για σειριοποιημένο είδος αποθέματος" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Η εντολή πώλησης δεν αντιστοιχεί στην αποστολή" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Η αποστολή δεν αντιστοιχεί στην εντολή πώλησης" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Γραμμή" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Αναφορά αποστολής εντολής πώλησης" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Είδος" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Επιλογή είδους αποθέματος προς δέσμευση" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Εισαγωγή ποσότητας δέσμευσης αποθέματος" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Αναφορά εντολής επιστροφής" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Εταιρεία από την οποία επιστρέφονται τα είδη" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Κατάσταση εντολής επιστροφής" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Γραμμή εντολής επιστροφής" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "Πρέπει να καθοριστεί είδος αποθέματος" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "Η ποσότητα επιστροφής υπερβαίνει την ποσότητα αποθέματος" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "Η ποσότητα επιστροφής πρέπει να είναι μεγαλύτερη από το μηδέν" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Μη έγκυρη ποσότητα για σειριοποιημένο είδος αποθέματος" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Επιλογή είδους προς επιστροφή από τον πελάτη" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Ημερομηνία παραλαβής" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Έκβαση" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Έκβαση για αυτή τη γραμμή" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "Κόστος που σχετίζεται με την επιστροφή ή επισκευή για αυτή τη γραμμή" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Επιπλέον γραμμή εντολής επιστροφής" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "ID παραγγελίας" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID της παραγγελίας προς αντιγραφή" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Αντιγραφή γραμμών" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Αντιγραφή γραμμών από την αρχική παραγγελία" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Αντιγραφή επιπλέον γραμμών" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Αντιγραφή επιπλέον γραμμών από την αρχική παραγγελία" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Αντιγραφή παραμέτρων" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Ολοκληρωμένες γραμμές" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Αντιγραφή παραγγελίας" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Καθορίστε επιλογές για την αντιγραφή αυτής της παραγγελίας" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Μη έγκυρο ID παραγγελίας" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Όνομα προμηθευτή" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Η παραγγελία δεν μπορεί να ακυρωθεί" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Να επιτρέπεται το κλείσιμο της παραγγελίας με μη ολοκληρωμένες γραμμές" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "Η παραγγελία έχει μη ολοκληρωμένες γραμμές" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Η παραγγελία δεν είναι ανοικτή" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Αυτόματη τιμολόγηση" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Αυτόματος υπολογισμός τιμής αγοράς βάσει των δεδομένων προϊόντος προμηθευτή" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Νόμισμα τιμής αγοράς" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Συγχώνευση ειδών" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Συγχώνευση ειδών με το ίδιο προϊόν, προορισμό και ημερομηνία στόχο σε μία γραμμή" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Εσωτερικός κωδικός προϊόντος" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Εσωτερική ονομασία προϊόντος" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν προμηθευτή" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Πρέπει να καθοριστεί εντολή αγοράς" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Ο προμηθευτής πρέπει να ταιριάζει με την εντολή αγοράς" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Η εντολή αγοράς πρέπει να ταιριάζει με τον προμηθευτή" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Γραμμή" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Επιλογή τοποθεσίας προορισμού για τα παραληφθέντα είδη" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Εισαγάγετε κωδικό παρτίδας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ημερομηνία λήξης" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "Εισαγάγετε ημερομηνία λήξης για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Εισαγάγετε σειριακούς αριθμούς για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Παράκαμψη πληροφοριών συσκευασίας για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Πρόσθετη σημείωση για τα εισερχόμενα είδη αποθέματος" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Barcode" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Σαρωμένο barcode" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Το barcode χρησιμοποιείται ήδη" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Πρέπει να δοθούν γραμμές" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Πρέπει να καθοριστεί τοποθεσία προορισμού" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Οι δοθείσες τιμές barcode πρέπει να είναι μοναδικές" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Αποστολές" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Ολοκληρωμένες αποστολές" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Νόμισμα τιμής πώλησης" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Δεσμευμένα είδη" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Δεν δόθηκαν λεπτομέρειες αποστολής" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Η γραμμή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Η ποσότητα πρέπει να είναι θετική" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Εισαγάγετε σειριακούς αριθμούς προς δέσμευση" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Η αποστολή έχει ήδη σταλεί" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Η αποστολή δεν συνδέεται με αυτή την παραγγελία" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Δεν βρέθηκε αντιστοίχιση για τους παρακάτω σειριακούς αριθμούς" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Οι παρακάτω σειριακοί αριθμοί δεν είναι διαθέσιμοι" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Γραμμή εντολής επιστροφής" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Η γραμμή δεν αντιστοιχεί στην εντολή επιστροφής" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Η γραμμή έχει ήδη παραληφθεί" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "Είδη μπορούν να παραληφθούν μόνο για παραγγελίες που είναι σε εξέλιξη" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Ποσότητα προς επιστροφή" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Νόμισμα τιμής γραμμής" @@ -5756,59 +5829,63 @@ msgstr "Είναι αναθεώρηση" msgid "Has Revisions" msgstr "Έχει αναθεωρήσεις" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "Έγκυρο BOM" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "Κατηγορίες κατά κληρονομικότητα" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "Αν είναι αληθές, συμπεριλαμβάνονται είδη σε θυγατρικές κατηγορίες της δοσμένης κατηγορίας" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Φιλτράρισμα κατά αριθμητικό ID κατηγορίας ή τη λέξη 'null'" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "Το προϊόν συναρμολόγησης είναι υπό δοκιμή" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Το προϊόν Προϊόντος είναι υπό δοκιμή" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Χρήσεις" @@ -5821,7 +5898,7 @@ msgstr "Κατηγορία προϊόντος" msgid "Part Categories" msgstr "Κατηγορίες προϊόντων" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Προεπιλεγμένη τοποθεσία" @@ -5849,7 +5926,7 @@ msgstr "Προεπιλεγμένες λέξεις-κλειδιά για προϊ msgid "Icon" msgstr "Εικονίδιο" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Εικονίδιο (προαιρετικό)" @@ -5870,984 +5947,1012 @@ msgstr "Προεπιλεγμένη τιμή" msgid "Default Parameter Value" msgstr "Προεπιλεγμένη τιμή παραμέτρου" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Προϊόντα" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή είναι κλειδωμένο" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή είναι ακόμη ενεργό" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Δεν είναι δυνατή η διαγραφή αυτού του προϊόντος επειδή χρησιμοποιείται σε συναρμολόγηση" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Το προϊόν '{self}' δεν μπορεί να χρησιμοποιηθεί στο BOM για '{parent}' (αναδρομικά)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Το προϊόν '{parent}' χρησιμοποιείται στο BOM για '{self}' (αναδρομικά)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "Το IPN πρέπει να ταιριάζει με το πρότυπο regex {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "Το προϊόν δεν μπορεί να είναι αναθεώρηση του εαυτού του" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Οι αναθεωρήσεις επιτρέπονται μόνο για προϊόντα συναρμολόγησης" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Δεν μπορεί να γίνει αναθεώρηση προϊόντος προτύπου" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "Το γονικό προϊόν πρέπει να αντιστοιχεί στο ίδιο πρότυπο" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Υπάρχει ήδη είδος αποθέματος με αυτόν τον σειριακό αριθμό" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Δεν επιτρέπεται διπλό IPN στις ρυθμίσεις προϊόντος" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "Υπάρχει ήδη διπλή αναθεώρηση προϊόντος." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Υπάρχει ήδη προϊόν με αυτό το όνομα, IPN και αναθεώρηση." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Τα προϊόντα δεν μπορούν να αντιστοιχιστούν σε δομικές κατηγορίες προϊόντων!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Όνομα προϊόντος" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Είναι πρότυπο" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Είναι αυτό το προϊόν προϊόν προτύπου;" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Είναι αυτό το προϊόν παραλλαγή άλλου προϊόντος;" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Παραλλαγή του" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Περιγραφή προϊόντος (προαιρετικά)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Λέξεις-κλειδιά" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Λέξεις-κλειδιά προϊόντος για βελτίωση της ορατότητας στα αποτελέσματα αναζήτησης" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Κατηγορία προϊόντος" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Αριθμός αναθεώρησης ή έκδοσης προϊόντος" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Αναθεώρηση" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Είναι αυτό το προϊόν αναθεώρηση άλλου προϊόντος;" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Αναθεώρηση του" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Πού αποθηκεύεται συνήθως αυτό το είδος;" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Προεπιλεγμένη λήξη" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "Χρόνος λήξης (σε ημέρες) για είδη αποθέματος αυτού του προϊόντος" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Ελάχιστο απόθεμα" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Ελάχιστο επιτρεπτό επίπεδο αποθέματος" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Μονάδες μέτρησης για αυτό το προϊόν" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Μπορεί αυτό το προϊόν να κατασκευαστεί από άλλα προϊόντα;" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "Μπορεί αυτό το προϊόν να χρησιμοποιηθεί για την κατασκευή άλλων προϊόντων;" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Έχει αυτό το προϊόν ιχνηλάτηση για μοναδικά είδη;" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "Μπορούν να καταχωρηθούν αποτελέσματα δοκιμών για αυτό το προϊόν;" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "Μπορεί αυτό το προϊόν να αγοραστεί από εξωτερικούς προμηθευτές;" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Μπορεί αυτό το προϊόν να πωληθεί σε πελάτες;" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Είναι αυτό το προϊόν ενεργό;" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Κλειδωμένα προϊόντα δεν μπορούν να τροποποιηθούν" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "Είναι αυτό ένα εικονικό προϊόν, όπως προϊόν λογισμικού ή άδεια;" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "Το BOM έχει επικυρωθεί" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "Είναι το BOM για αυτό το προϊόν έγκυρο;" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Άθροισμα ελέγχου BOM" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Αποθηκευμένο άθροισμα ελέγχου BOM" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Έλεγχος BOM από" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Ημερομηνία ελέγχου BOM" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Χρήστης δημιουργίας" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Ιδιοκτήτης υπεύθυνος για αυτό το προϊόν" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Πώληση πολλαπλάσιων" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Νόμισμα που χρησιμοποιείται για την προσωρινή αποθήκευση υπολογισμών τιμολόγησης" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Ελάχιστο κόστος BOM" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Ελάχιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Μέγιστο κόστος BOM" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Μέγιστο κόστος προϊόντων Προϊόντων" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Ελάχιστο κόστος αγοράς" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Ελάχιστο ιστορικό κόστος αγοράς" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Μέγιστο κόστος αγοράς" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Μέγιστο ιστορικό κόστος αγοράς" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Ελάχιστη εσωτερική τιμή" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Ελάχιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Μέγιστη εσωτερική τιμή" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Μέγιστο κόστος βάσει εσωτερικών κλιμακωτών τιμών" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Ελάχιστη τιμή προμηθευτή" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Ελάχιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Μέγιστη τιμή προμηθευτή" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Μέγιστη τιμή προϊόντος από εξωτερικούς προμηθευτές" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Ελάχιστο κόστος παραλλαγής" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Υπολογισμένο ελάχιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Μέγιστο κόστος παραλλαγής" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Υπολογισμένο μέγιστο κόστος προϊόντων παραλλαγών" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Ελάχιστο κόστος" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Παράκαμψη ελάχιστου κόστους" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Μέγιστο κόστος" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Παράκαμψη μέγιστου κόστους" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Υπολογισμένο συνολικό ελάχιστο κόστος" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Υπολογισμένο συνολικό μέγιστο κόστος" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Ελάχιστη τιμή πώλησης" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Ελάχιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Μέγιστη τιμή πώλησης" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Μέγιστη τιμή πώλησης βάσει κλιμακωτών τιμών" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Ελάχιστο κόστος πώλησης" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Ελάχιστη ιστορική τιμή πώλησης" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Μέγιστο κόστος πώλησης" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Μέγιστη ιστορική τιμή πώλησης" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Προϊόν για απογραφή" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Αριθμός ειδών" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Αριθμός μεμονωμένων εγγραφών αποθέματος κατά τον χρόνο απογραφής" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Συνολικό διαθέσιμο απόθεμα κατά τον χρόνο απογραφής" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Ημερομηνία" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Ημερομηνία που πραγματοποιήθηκε η απογραφή" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Ελάχιστο κόστος αποθέματος" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Εκτιμώμενο ελάχιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Μέγιστο κόστος αποθέματος" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Εκτιμώμενο μέγιστο κόστος αποθέματος σε διαθεσιμότητα" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Κλιμακωτή τιμή πώλησης προϊόντος" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Πρότυπο δοκιμής προϊόντος" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Μη έγκυρο όνομα προτύπου - πρέπει να περιλαμβάνει τουλάχιστον έναν αλφαριθμητικό χαρακτήρα" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "Πρότυπα δοκιμών μπορούν να δημιουργηθούν μόνο για προϊόντα που είναι υπό δοκιμή" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "Υπάρχει ήδη πρότυπο δοκιμής με το ίδιο κλειδί για το προϊόν" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Όνομα δοκιμής" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Εισαγάγετε όνομα για τη δοκιμή" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Κλειδί δοκιμής" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Απλοποιημένο κλειδί για τη δοκιμή" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Περιγραφή δοκιμής" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Εισαγάγετε περιγραφή για αυτή τη δοκιμή" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Είναι αυτή η δοκιμή ενεργή;" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Απαραίτητη" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Απαιτείται η επιτυχής ολοκλήρωση αυτής της δοκιμής;" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Απαιτεί τιμή" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή τιμή κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Απαιτεί συνημμένο" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "Απαιτεί αυτή η δοκιμή συνημμένο αρχείο κατά την προσθήκη αποτελέσματος δοκιμής;" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Έγκυρες επιλογές για αυτή τη δοκιμή (διαχωρισμένες με κόμμα)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση είναι κλειδωμένη" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Το στοιχείο BOM δεν μπορεί να τροποποιηθεί - η συναρμολόγηση παραλλαγής είναι κλειδωμένη" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Επιλέξτε γονικό προϊόν" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Υποπροϊόν" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Επιλέξτε προϊόν που θα χρησιμοποιηθεί στο BOM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Ποσότητα BOM για αυτό το στοιχείο BOM" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Αυτό το στοιχείο BOM είναι προαιρετικό" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Αυτό το στοιχείο BOM είναι αναλώσιμο (δεν παρακολουθείται στις εντολές παραγωγής)" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "Ποσότητα ρύθμισης" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Επιπλέον απαιτούμενη ποσότητα για μια παραγωγή, για να ληφθούν υπόψη οι απώλειες ρύθμισης" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "Φθορά" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Εκτιμώμενη φθορά για μια παραγωγή, εκφρασμένη ως ποσοστό (0-100)" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "Πολλαπλάσιο στρογγυλοποίησης" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Στρογγυλοποίηση προς τα πάνω της απαιτούμενης ποσότητας παραγωγής στο πλησιέστερο πολλαπλάσιο αυτής της τιμής" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Αναφορά στοιχείου BOM" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Σημειώσεις στοιχείου BOM" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Άθροισμα ελέγχου" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Άθροισμα ελέγχου γραμμής BOM" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Επικυρωμένο" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Αυτό το στοιχείο BOM έχει επικυρωθεί" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Κληρονομείται" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Αυτό το στοιχείο BOM κληρονομείται από τα BOM για προϊόντα παραλλαγών" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Είδη αποθέματος για προϊόντα παραλλαγών μπορούν να χρησιμοποιηθούν για αυτό το στοιχείο BOM" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "Η ποσότητα πρέπει να είναι ακέραια τιμή για προϊόντα με ιχνηλάτηση" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Πρέπει να καθοριστεί υποπροϊόν" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Εναλλακτικό στοιχείο BOM" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "Το εναλλακτικό προϊόν δεν μπορεί να είναι το ίδιο με το κύριο προϊόν" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Γονικό στοιχείο BOM" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Εναλλακτικό προϊόν" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Προϊόν 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Προϊόν 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Επιλέξτε σχετικό προϊόν" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Σημείωση για αυτή τη σχέση" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "Δεν μπορεί να δημιουργηθεί σχέση προϊόντος μεταξύ ενός προϊόντος και του εαυτού του" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Υπάρχει ήδη διπλή σχέση" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Γονική κατηγορία" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Γονική κατηγορία προϊόντος" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Υποκατηγορίες" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Αποτελέσματα" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Αριθμός αποτελεσμάτων που έχουν καταγραφεί για αυτό το πρότυπο" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Νόμισμα αγοράς για αυτό το είδος αποθέματος" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "Το αρχείο δεν είναι εικόνα" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Αρχικό προϊόν" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Επιλέξτε αρχικό προϊόν για αντιγραφή" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Αντιγραφή εικόνας" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Αντιγραφή εικόνας από το αρχικό προϊόν" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Αντιγραφή BOM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Αντιγραφή λίστας υλικών (BOM) από το αρχικό προϊόν" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Αντιγραφή δεδομένων παραμέτρων από το αρχικό προϊόν" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Αντιγραφή σημειώσεων" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Αντιγραφή σημειώσεων από το αρχικό προϊόν" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Αντιγραφή δοκιμών" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "Αντιγραφή προτύπων δοκιμών από το αρχικό προϊόν" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Αρχική ποσότητα αποθέματος" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Καθορίστε αρχική ποσότητα αποθέματος για αυτό το προϊόν. Αν η ποσότητα είναι μηδέν, δεν προστίθεται απόθεμα" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Αρχική τοποθεσία αποθέματος" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Καθορίστε αρχική τοποθεσία αποθέματος για αυτό το προϊόν" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Επιλέξτε προμηθευτή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Επιλέξτε κατασκευαστή (ή αφήστε κενό για παράλειψη)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Κωδικός προϊόντος κατασκευαστή" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος προμηθευτής" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Η επιλεγμένη εταιρεία δεν είναι έγκυρος κατασκευαστής" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Υπάρχει ήδη προϊόν κατασκευαστή με αυτό το MPN" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Υπάρχει ήδη προϊόν προμηθευτή με αυτό το SKU" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Όνομα κατηγορίας" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Σε παραγωγή" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "Ποσότητα αυτού του προϊόντος που βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Εκκρεμής ποσότητα αυτού του προϊόντος που έχει προγραμματιστεί για παραγωγή" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Είδη αποθέματος" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Αναθεωρήσεις" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Συνολικό απόθεμα" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Μη δεσμευμένο απόθεμα" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Απόθεμα παραλλαγών" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Αντιγραφή προϊόντος" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Αντιγραφή αρχικών δεδομένων από άλλο προϊόν" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Αρχικό απόθεμα" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Δημιουργία προϊόντος με αρχική ποσότητα αποθέματος" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Πληροφορίες προμηθευτή" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Προσθήκη αρχικών πληροφοριών προμηθευτή για αυτό το προϊόν" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Αντιγραφή παραμέτρων κατηγορίας" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Αντιγραφή προτύπων παραμέτρων από την επιλεγμένη κατηγορία προϊόντος" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Υπάρχουσα εικόνα" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Όνομα αρχείου υπάρχουσας εικόνας προϊόντος" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Το αρχείο εικόνας δεν υπάρχει" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Επικύρωση ολόκληρης της λίστας υλικών (BOM)" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Μπορεί να παραχθεί" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "Απαιτείται για εντολές παραγωγής" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "Δεσμευμένο σε εντολές παραγωγής" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "Απαιτείται για εντολές πώλησης" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "Δεσμευμένο σε εντολές πώλησης" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Ελάχιστη τιμή" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Παράκαμψη υπολογισμένης τιμής για την ελάχιστη τιμή" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Νόμισμα ελάχιστης τιμής" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Μέγιστη τιμή" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Παράκαμψη υπολογισμένης τιμής για τη μέγιστη τιμή" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Νόμισμα μέγιστης τιμής" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Ενημέρωση" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Ενημέρωση τιμολόγησης για αυτό το προϊόν" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Δεν ήταν δυνατή η μετατροπή από τα δοθέντα νομίσματα σε {default_currency}" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "Η ελάχιστη τιμή δεν πρέπει να είναι μεγαλύτερη από τη μέγιστη τιμή" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "Η μέγιστη τιμή δεν πρέπει να είναι μικρότερη από την ελάχιστη τιμή" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Επιλέξτε τη γονική συναρμολόγηση" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Επιλέξτε το προϊόν Προϊόντος" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Επιλέξτε προϊόν από το οποίο θα αντιγραφεί το BOM" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Αφαίρεση υπαρχόντων δεδομένων" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Αφαίρεση υπαρχόντων στοιχείων BOM πριν την αντιγραφή" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Συμπερίληψη κληρονομημένων" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "Συμπερίληψη στοιχείων BOM που κληρονομούνται από προϊόντα προτύπων" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Παράλειψη μη έγκυρων γραμμών" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Ενεργοποιήστε αυτή την επιλογή για να παραλείπονται οι μη έγκυρες γραμμές" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Αντιγραφή εναλλακτικών προϊόντων" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Αντιγραφή εναλλακτικών προϊόντων κατά την αντιγραφή στοιχείων BOM" @@ -7099,15 +7204,15 @@ msgstr "Ποσότητα προς δέσμευση" msgid "Label printing failed" msgstr "Η εκτύπωση ετικέτας απέτυχε" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Σφάλμα κατά τη μετατροπή της ετικέτας σε PDF" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Σφάλμα κατά τη μετατροπή της ετικέτας σε HTML" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Δεν δόθηκαν είδη για εκτύπωση" @@ -7168,7 +7273,7 @@ msgstr "Παρέχει εγγενή υποστήριξη για barcodes" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "Ειδοποίηση αλλαγής προϊόντος" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "Το προϊόν `{part.name}` ενεργοποίησε ένα συμβάν `{part_action}`" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "Εκτυπωτής ετικετών PDF InvenTree" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Παρέχει εγγενή υποστήριξη για εκτύπωση ετικετών PDF" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Λειτουργία αποσφαλμάτωσης" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Ενεργοποίηση λειτουργίας αποσφαλμάτωσης - επιστρέφει ακατέργαστο HTML αντί για PDF" @@ -7568,7 +7673,7 @@ msgstr "Περίγραμμα" msgid "Print a border around each label" msgstr "Εκτύπωση περιγράμματος γύρω από κάθε ετικέτα" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Οριζόντιος προσανατολισμός" @@ -8029,7 +8134,7 @@ msgstr "Το πρόσθετο δεν υποστηρίζει εκτύπωση ε msgid "Invalid label dimensions" msgstr "Μη έγκυρες διαστάσεις ετικέτας" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Δεν δόθηκαν έγκυρα είδη στο πρότυπο" @@ -8073,112 +8178,112 @@ msgstr "Συσχέτιση με μοντέλο κατά την εκτύπωση" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Αποθήκευση του παραγόμενου αναφοράς ως συνημμένου στην συνδεδεμένη εγγραφή μοντέλου κατά την εκτύπωση" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Μοτίβο ονόματος αρχείου" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Μοτίβο για τη δημιουργία ονομάτων αρχείων" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Το πρότυπο είναι ενεργό" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "Τύπος μοντέλου-στόχου για το πρότυπο" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Φίλτρα" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Φίλτρα ερωτημάτων προτύπου (λίστα ζευγών key=value χωρισμένων με κόμμα)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Αρχείο προτύπου" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Μέγεθος σελίδας για αναφορές PDF" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Απόδοση αναφοράς σε οριζόντιο προσανατολισμό" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "Συγχώνευση" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "Απόδοση μίας ενιαίας αναφοράς για τα επιλεγμένα είδη" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Αναφορά που δημιουργήθηκε από το πρότυπο {self.name}" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "Σφάλμα σύνταξης προτύπου" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "Σφάλμα κατά την απόδοση της αναφοράς" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "Σφάλμα κατά τη δημιουργία της αναφοράς" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "Σφάλμα κατά τη συγχώνευση των αποτελεσμάτων αναφοράς" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Πλάτος [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Πλάτος ετικέτας, σε mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Ύψος [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Ύψος ετικέτας, σε mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "Σφάλμα κατά την εκτύπωση ετικετών" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Απόσπασμα" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Αρχείο αποσπάσματος αναφοράς" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Περιγραφή αρχείου αποσπάσματος" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Πόρος" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Αρχείο πόρου αναφοράς" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Περιγραφή αρχείου πόρου" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Σειριακός αριθμός" @@ -8538,7 +8643,7 @@ msgstr "Τύποι τοποθεσίας αποθέματος" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Προεπιλεγμένο εικονίδιο για όλες τις τοποθεσίες που δεν έχουν ορισμένο εικονίδιο (προαιρετικό)" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Τοποθεσία αποθέματος" @@ -8546,11 +8651,11 @@ msgstr "Τοποθεσία αποθέματος" msgid "Stock Locations" msgstr "Τοποθεσίες αποθέματος" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Ιδιοκτήτης" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Επιλέξτε ιδιοκτήτη" @@ -8558,7 +8663,7 @@ msgstr "Επιλέξτε ιδιοκτήτη" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Τα είδη αποθέματος δεν μπορούν να τοποθετηθούν απευθείας σε δομικές τοποθεσίες αποθέματος, αλλά μπορούν να τοποθετηθούν σε θυγατρικές τοποθεσίες." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Εξωτερικό" @@ -8578,274 +8683,282 @@ msgstr "Ο τύπος τοποθεσίας αποθέματος για αυτή msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Δεν μπορείτε να κάνετε αυτή την τοποθεσία αποθέματος δομική, επειδή κάποια είδη αποθέματος είναι ήδη τοποθετημένα σε αυτή!" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "Το {field} δεν υπάρχει" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Πρέπει να καθοριστεί προϊόν" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "Τα είδη αποθέματος δεν μπορούν να τοποθετηθούν σε δομικές τοποθεσίες αποθέματος!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Δεν μπορεί να δημιουργηθεί είδος αποθέματος για εικονικά προϊόντα" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Ο τύπος προϊόντος ('{self.supplier_part.part}') πρέπει να είναι {self.part}" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "Η ποσότητα πρέπει να είναι 1 για είδος με σειριακό αριθμό" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Δεν μπορεί να οριστεί σειριακός αριθμός αν η ποσότητα είναι μεγαλύτερη από 1" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Το είδος δεν μπορεί να ανήκει στον εαυτό του" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "Το είδος πρέπει να έχει αναφορά παραγωγής αν is_building=True" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Η αναφορά παραγωγής δεν αντιστοιχεί στο ίδιο προϊόν" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Γονικό είδος αποθέματος" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Βασικό προϊόν" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "Επιλέξτε αντίστοιχο προϊόν προμηθευτή για αυτό το είδος αποθέματος" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Πού βρίσκεται αυτό το είδος αποθέματος;" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Συσκευασία στην οποία αποθηκεύεται αυτό το είδος αποθέματος" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Εγκατεστημένο σε" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Είναι αυτό το είδος εγκατεστημένο σε άλλο είδος;" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Σειριακός αριθμός για αυτό το είδος" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Κωδικός παρτίδας για αυτό το είδος αποθέματος" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Ποσότητα αποθέματος" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Πηγή παραγωγής" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Εντολή παραγωγής για αυτό το είδος αποθέματος" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Έχει αναλωθεί από" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Εντολή παραγωγής που κατανάλωσε αυτό το είδος αποθέματος" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Πηγή εντολής αγοράς" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Εντολή αγοράς για αυτό το είδος αποθέματος" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Εντολή πώλησης προορισμού" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Ημερομηνία λήξης για το είδος αποθέματος. Το απόθεμα θα θεωρείται ληγμένο μετά από αυτή την ημερομηνία" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Διαγραφή κατά την εξάντληση" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Διαγραφή αυτού του είδους αποθέματος όταν εξαντληθεί" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Τιμή αγοράς ανά μονάδα κατά τον χρόνο αγοράς" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Μετατράπηκε σε προϊόν" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "Η ποσότητα υπερβαίνει το διαθέσιμο απόθεμα" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Το προϊόν δεν έχει οριστεί ως ιχνηλάσιμο" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Η ποσότητα πρέπει να είναι ακέραιος αριθμός" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Η ποσότητα δεν πρέπει να υπερβαίνει το διαθέσιμο απόθεμα ({self.quantity})" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Οι σειριακοί αριθμοί πρέπει να δοθούν ως λίστα" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Η ποσότητα δεν αντιστοιχεί στους σειριακούς αριθμούς" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Το πρότυπο δοκιμής δεν υπάρχει" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Το είδος αποθέματος έχει αντιστοιχιστεί σε εντολή πώλησης" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Το είδος αποθέματος είναι εγκατεστημένο σε άλλο είδος" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Το είδος αποθέματος περιέχει άλλα είδη" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Το είδος αποθέματος έχει αντιστοιχιστεί σε πελάτη" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Το είδος αποθέματος βρίσκεται αυτή τη στιγμή σε παραγωγή" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Σειριακό απόθεμα δεν μπορεί να συγχωνευθεί" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Διπλότυπα είδη αποθέματος" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Τα είδη αποθέματος πρέπει να αναφέρονται στο ίδιο προϊόν" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "Τα είδη αποθέματος πρέπει να αναφέρονται στο ίδιο προϊόν προμηθευτή" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Οι κωδικοί κατάστασης αποθέματος πρέπει να ταιριάζουν" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "Το StockItem δεν μπορεί να μετακινηθεί καθώς δεν βρίσκεται σε απόθεμα" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "Ιχνηλάτηση είδους αποθέματος" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Σημειώσεις καταχώρησης" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "Αποτέλεσμα δοκιμής είδους αποθέματος" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Πρέπει να δοθεί τιμή για αυτή τη δοκιμή" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Πρέπει να μεταφορτωθεί συνημμένο για αυτή τη δοκιμή" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "Μη έγκυρη τιμή για αυτή τη δοκιμή" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Αποτέλεσμα δοκιμής" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Τιμή αποτελέσματος δοκιμής" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Συνημμένο αποτελέσματος δοκιμής" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Σημειώσεις δοκιμής" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Σταθμός δοκιμής" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "Ο αναγνωριστικός κωδικός του σταθμού δοκιμής όπου πραγματοποιήθηκε η δοκιμή" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Έναρξη" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "Χρονική σήμανση έναρξης της δοκιμής" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Ολοκλήρωση" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "Χρονική σήμανση λήξης της δοκιμής" @@ -8929,7 +9042,7 @@ msgstr "Εισαγάγετε σειριακούς αριθμούς για νέα msgid "Supplier Part Number" msgstr "Κωδικός προϊόντος προμηθευτή" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Ληγμένο" @@ -9466,131 +9579,131 @@ msgstr "Τελευταία φορά που χρησιμοποιήθηκε το msgid "Revoked" msgstr "Έχει ανακληθεί" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Σύνολο δικαιωμάτων" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Προβολή" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Δικαίωμα προβολής Προϊόντων" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Προσθήκη" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Δικαίωμα προσθήκης Προϊόντων" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Τροποποίηση" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Δικαίωμα επεξεργασίας Προϊόντων" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Διαγραφή" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Δικαίωμα διαγραφής Προϊόντων" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "Bot" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Εσωτερικός" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Επισκέπτης" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Γλώσσα" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Προτιμώμενη γλώσσα χρήστη" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Θέμα" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Ρυθμίσεις για το web UI σε μορφή JSON - μην τις επεξεργάζεστε χειροκίνητα!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Μικροεφαρμογές" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "Ρυθμίσεις για τα widgets του πίνακα ελέγχου σε μορφή JSON - μην τις επεξεργάζεστε χειροκίνητα!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Προβαλλόμενο όνομα" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Επιλεγμένο προβαλλόμενο όνομα χρήστη" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Θέση" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "Κύριος επαγγελματικός τίτλος ή θέση" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Μήνυμα κατάστασης χρήστη" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "Πληροφορίες τοποθεσίας χρήστη" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "Ο χρήστης χρησιμοποιεί ενεργά το σύστημα" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "Προτιμώμενα στοιχεία επικοινωνίας χρήστη" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Τύπος χρήστη" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "Τι τύπος χρήστη είναι;" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Οργανισμός" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "Κύριος οργανισμός/φορέας του χρήστη" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Κύρια ομάδα" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "Κύρια ομάδα του χρήστη" diff --git a/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/en/LC_MESSAGES/django.po index 5aea72b2ec..08d5437435 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-05-03 02:20+0000\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -90,6 +90,7 @@ msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "" @@ -105,11 +106,11 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -176,39 +177,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -220,7 +221,7 @@ msgstr "" msgid "Email" msgstr "" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -264,124 +265,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -553,8 +538,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -562,21 +547,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -596,9 +581,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -606,7 +591,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -654,11 +639,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -670,16 +655,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -688,32 +673,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -721,7 +706,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -730,17 +715,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -785,8 +770,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -862,8 +847,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -871,8 +856,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -892,7 +877,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -908,8 +893,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -918,12 +903,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -935,8 +920,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -969,7 +954,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -981,47 +966,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1039,60 +1024,60 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1100,7 +1085,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1136,7 +1121,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1157,8 +1142,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1246,7 +1231,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1294,7 +1279,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1307,7 +1292,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1387,9 +1372,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1405,7 +1390,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1413,29 +1398,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1532,6 +1517,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1555,610 +1544,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 -msgid "Model type" -msgstr "" - -#: common/models.py:1997 -msgid "Target model type for image" -msgstr "" - -#: common/models.py:2005 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:2021 -msgid "Comment" +#: common/models.py:2019 +msgid "No file attached to rename" msgstr "" #: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 +msgid "Model type" +msgstr "" + +#: common/models.py:2072 +msgid "Target model type for image" +msgstr "" + +#: common/models.py:2080 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:2096 +msgid "Comment" +msgstr "" + +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2168,181 +2181,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2364,7 +2377,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2458,7 +2471,7 @@ msgstr "" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2602,13 +2615,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2621,637 +2634,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3325,326 +3338,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3952,6 +4009,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4013,8 +4078,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4060,7 +4125,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4112,7 +4177,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4204,12 +4269,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4222,8 +4287,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4251,8 +4316,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4263,7 +4328,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4291,15 +4356,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4316,7 +4381,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4340,23 +4405,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4512,7 +4577,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4624,7 +4689,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4728,7 +4793,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4752,117 +4817,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4870,8 +4935,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4887,11 +4952,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4915,11 +4980,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4931,7 +4996,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4964,12 +5029,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4993,15 +5058,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5025,616 +5090,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5757,59 +5830,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5822,7 +5899,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5850,7 +5927,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5871,984 +5948,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7100,15 +7205,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7169,7 +7274,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7515,20 +7620,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7569,7 +7674,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8030,7 +8135,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8074,112 +8179,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8276,7 +8381,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8539,7 +8644,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8547,11 +8652,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8559,7 +8664,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8579,274 +8684,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8930,7 +9043,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9467,131 +9580,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/es/LC_MESSAGES/django.po index 93a544c8b5..e84d13b24b 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Spanish\n" "Language: es_ES\n" @@ -23,7 +23,7 @@ msgstr "endpoint API no encontrado" #: InvenTree/api.py:438 msgid "List of items must be provided for bulk operation" -msgstr "" +msgstr "Se debe proporcionar una lista de elementos para la operación por lotes" #: InvenTree/api.py:445 msgid "Items must be provided as a list" @@ -47,7 +47,7 @@ msgstr "Sin datos proporcionados" #: InvenTree/api.py:503 msgid "This field must be unique." -msgstr "" +msgstr "Este campo debe ser único." #: InvenTree/api.py:832 msgid "User does not have permission to view this model" @@ -89,6 +89,7 @@ msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -104,11 +105,11 @@ 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:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -165,49 +166,49 @@ msgstr "Los datos contienen contenido de marcado prohibido" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "" +msgstr "URL no válida: falta el nombre de host" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" -msgstr "" +msgstr "URL no válida: no se pudo resolver el nombre de host" #: InvenTree/helpers_model.py:120 msgid "URL points to a private or reserved IP address" -msgstr "" +msgstr "La URL apunta a una dirección IP privada o reservada" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" -msgstr "" +msgstr "Demasiadas redirecciones" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 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:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" @@ -219,7 +220,7 @@ msgstr "Iniciar sesión en la aplicación" msgid "Email" msgstr "Correo electrónico" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Debe habilitar la autenticación de doble factor antes de continuar." @@ -263,124 +264,108 @@ msgstr "La referencia debe coincidir con la expresión regular {pattern}" msgid "Reference number is too large" msgstr "El número de referencia es demasiado grande" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Descripción" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Ruta" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Los nombres duplicados no pueden existir bajo el mismo padre" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Notas de Markdown (opcional)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Datos de código de barras" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Datos de código de barras de terceros" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hash del Código de barras" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Hash único de datos de código de barras" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Error de servidor" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Se ha registrado un error por el servidor." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Imagen remota" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL de imagen remota" - -#: InvenTree/serializers.py:818 -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:825 -msgid "Failed to download image from remote URL" -msgstr "Error al descargar la imagen desde la URL remota" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ 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:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Estado del pedido" @@ -561,21 +546,21 @@ msgstr "Estado del pedido" msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Incluye Variantes" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -605,7 +590,7 @@ msgstr "Categoría" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Asignado a mí" @@ -653,11 +638,11 @@ msgstr "Completado antes" msgid "Completed after" msgstr "Completado después" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Fecha Mínima" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Fecha Máxima" @@ -669,16 +654,16 @@ msgstr "Excluir Árbol" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Consumible" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opcional" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Montaje" @@ -687,32 +672,32 @@ msgstr "Montaje" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Comprobable" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Agotado" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "En pedido" @@ -720,7 +705,7 @@ msgstr "En pedido" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Construir órden" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Ubicación" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Salida" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Estado de la construcción" msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Numero de lote" @@ -870,8 +855,8 @@ msgstr "Numero de lote" msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Fecha de Creación" @@ -891,7 +876,7 @@ msgstr "Fecha límite de finalización" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Fecha de finalización" @@ -907,8 +892,8 @@ msgstr "Emitido por" msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" @@ -917,12 +902,12 @@ msgstr "Responsable" msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Link externo" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Enlace a URL externa" @@ -934,8 +919,8 @@ msgstr "Prioridad de construcción" msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Código del proyecto" @@ -968,7 +953,7 @@ msgstr "Pedido #[order] ha sido procesado" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" @@ -980,47 +965,47 @@ msgstr "La construcción de la salida ya está completa" 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Ensamblar equipo" msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 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:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Instalar en" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Artículo de stock de destino" @@ -1099,7 +1084,7 @@ msgstr "Artículo de stock de destino" msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Nombre de parte" @@ -1135,7 +1120,7 @@ msgstr "Cantidad entera requerida para partes rastreables" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de serie" @@ -1156,8 +1141,8 @@ msgstr "Autoasignar Números de Serie" 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:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" @@ -1245,7 +1230,7 @@ msgstr "Aceptar que los artículos de stock no se han asignado completamente a e msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Aceptar incompleto" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcció msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" @@ -1306,7 +1291,7 @@ msgstr "La salida de la construcción debe especificarse para la asignación de 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Parte del proveedor" @@ -1404,7 +1389,7 @@ msgstr "Referencia de orden de Ensamblado" msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Rastreable" @@ -1412,29 +1397,29 @@ msgstr "Rastreable" msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Stock Disponible" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1554,610 +1543,634 @@ msgstr "Sin plugin" msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Actualizado" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Fecha y hora de la última actualización" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Código único del proyecto" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Descripción del proyecto" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Usuario o grupo responsable de este projecto" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Tecla de ajustes" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Valor de ajuste" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "El valor elegido no es una opción válida" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "El valor debe ser un valor booleano" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "El valor debe ser un entero" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "El valor debe ser un número válido" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "El valor no pasa las comprobaciones de validación" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Cadena de clave debe ser única" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Usuario" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Precio" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Punto final en el que se recibe este webhook" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activo" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Está activo este webhook" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token para el acceso" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Clave" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Servidor" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Servidor desde el cual se recibió este mensaje" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Encabezado" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Encabezado del mensaje" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Cuerpo" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Cuerpo de este mensaje" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Endpoint en el que se recibió este mensaje" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Trabajado en" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "¿El trabajo en este mensaje ha terminado?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Título" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Enlace" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Publicado" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Resumen" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Leer" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "¿Esta noticia ya fue leída?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Archivo de imagen" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Unidad personalizada" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "El símbolo de la unidad debe ser único" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Nombre de unidad debe ser un identificador válido" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Nombre de unidad" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Símbolo de unidad opcional" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definición" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definición de unidad" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Archivo adjunto" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Archivo no encontrado" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Comentario" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Comentario de archivo adjunto" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Fecha de carga" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Fecha de carga del archivo" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Tamaño del archivo" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Llave lógica" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Valor" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que se mostrará en el frontend" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Color" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Color que se mostrará en el frontend" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Modelo" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "El modelo debe ser seleccionado" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "La clave debe ser seleccionada" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "La clave lógica debe ser seleccionada" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Lista de selección" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Listas de Selección" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Nombre de la lista de selección" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Descripción de la lista de selección" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "¿Está bloqueada esta lista de selección?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "¿Se puede utilizar esta lista de selección?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Complemento de origen" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Complemento que proporciona la lista de selección" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Cadena de origen" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "Cadena opcional que identifica la fuente usada para esta lista" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Entrada por defecto" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Creado" -#: common/models.py:2303 +#: common/models.py:2378 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:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Última actualización" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Unidades" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Opciones" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Plantilla" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Datos" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Valor del parámetro" msgid "Note" msgstr "Nota" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Respuesta" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Resultado" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clave" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Artículos Recibidos" @@ -2457,7 +2470,7 @@ msgstr "Nombre de Archivo" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "Intervalo de actualización de moneda" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "días" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Plugin de actualización de moneda a usar" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Descargar desde URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Límite de tamaño de descarga" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Tamaño máximo de descarga permitido para la imagen remota" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "Agente de usuario usado para descargar desde la URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Validación estricta de URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Requerir especificación de esquema al validar URLs" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Actualizar intervalo de actualización" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Copia de seguridad automática" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Intervalo de respaldo automático" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Intervalo de eliminación de tareas" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Intervalo de eliminación de registro de errores" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Intervalo de eliminación de notificaciones" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Soporte de código de barras" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Guardar resultados de código de barras" -#: common/setting/system.py:383 +#: common/setting/system.py:363 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:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Número máximo de escaneos de código de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:369 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:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Retraso de entrada de código de barras" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Tiempo de retraso en la lectura de códigos de barras" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Soporte para Webcam de código de barras" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 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:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Complemento para generar códigos de barra" -#: common/setting/system.py:414 +#: common/setting/system.py:394 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:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Revisiones de partes" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisión para parte" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:438 +#: common/setting/system.py:418 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:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Permitir IPN duplicado" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que varias partes compartan el mismo IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Permitir editar IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Copiar parte de datos BOM" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar datos BOM por defecto al duplicar una parte" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Copiar parámetros de parte" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Copiar parte de datos de prueba" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Copiar plantillas de parámetros de categoría" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Componente" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Comprable" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Vendible" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Las partes se pueden vender por defecto" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Las partes son virtuales por defecto" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Mostrar partes relacionadas" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Mostrar partes relacionadas para una parte" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Datos iniciales de existencias" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Datos iniciales del proveedor" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Formato de visualización de Nombre de Parte" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Formato para mostrar el nombre de la parte" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Icono por defecto de la categoría de parte" -#: common/setting/system.py:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de lugares decimales en el precio" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Máximo de lugares decimales en el precio" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Usar precios de proveedor" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Anulación del historial de compra" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Usar precio del artículo de almacén" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Edad del precio del artículo de almacén" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Usar precios variantes" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir variantes de precios en los cálculos generales de precios" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Solo variantes activas" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Intervalo de reconstrucción de precios" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Precios internos" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Habilitar precios internos para partes" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Anulación del precio interno" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Habilitar impresión de etiquetas" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Habilitar impresión de etiquetas desde la interfaz web" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "PPP de la imagen de etiqueta" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Habilitar generación de informes" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Registrar errores de reportes" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Registrar errores ocurridos al generar reportes" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Tamaño de página" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Tamaño de página predeterminado para informes PDF" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Forzar unidades de parámetro" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Seriales únicos globalmente" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Eliminar existencias agotadas" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Plantilla de código de lote" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Expiración de stock" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Habilitar la funcionalidad de expiración de stock" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Vender existencias caducadas" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Permitir venta de existencias caducadas" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Tiempo histórico de Stock" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Crear Stock Caducado" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Permitir crear con stock caducado" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Control de Stock" -#: common/setting/system.py:753 +#: common/setting/system.py:745 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:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Icono por defecto de ubicación de almacén" -#: common/setting/system.py:759 +#: common/setting/system.py:751 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:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Mostrar Articulos de Stock Instalados" -#: common/setting/system.py:765 +#: common/setting/system.py:757 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:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Permitir transferencia Sin Existencias" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Armado" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Requerir Dueño Responsable" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 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:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Requerir Parte Activa" -#: common/setting/system.py:799 +#: common/setting/system.py:791 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:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Requerir Parte Bloqueada" -#: common/setting/system.py:805 +#: common/setting/system.py:797 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:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Bloquear hasta que los Tests pasen" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\"" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Patrón de Referencia de Orden de Compra" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Editar Ordenes de Compra Completados" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Convertir moneda" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Ordenes de compra" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Habilitar función de contraseña olvidada" -#: common/setting/system.py:946 +#: common/setting/system.py:954 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:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Habilitar registro" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Habilitar SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Habilitar SSO en las páginas de inicio de sesión" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Habilitar registro SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Habilitar sincronización de grupo SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "Clave de grupo SSO" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "Mapa del grupo SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Eliminar grupos fuera de SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email requerido" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Requiere usuario para suministrar correo al registrarse" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Auto-rellenar usuarios SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Correo dos veces" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Contraseña dos veces" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Dominios permitidos" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Grupo al registrarse" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Forzar MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Los usuarios deben utilizar seguridad multifactor." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Comprobar complementos al iniciar" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Revisar actualizaciones del plugin" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar comprobaciones periódicas para actualizaciones de plugins instalados" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Habilitar integración de URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Habilitar plugins para añadir rutas de URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Habilitar integración de navegación" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Habilitar plugins para integrar en la navegación" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Habilitar integración de la aplicación" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Habilitar plugins para añadir aplicaciones" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Habilitar integración de programación" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Habilitar plugins para ejecutar tareas programadas" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Habilitar integración de eventos" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Habilitar plugins para responder a eventos internos" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Habilitar integración de interfaz" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Habilitar complementos para integrar en la interfaz de usuario" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Habilitar códigos de proyecto para rastrear proyectos" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Excluir Ubicaciones Externas" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Periodo de inventario automático" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Mostrar nombres completos de los usuarios" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Habilitar datos de estación de prueba" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 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:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "Últimas impresoras usadas" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Fabricante" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Correo electrónico de contacto" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Contacto" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Dirección" @@ -4203,12 +4268,12 @@ msgstr "Notas de envío para uso interno" msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Parte base" @@ -4221,8 +4286,8 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "Las unidades de paquete deben ser mayor que cero" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4290,15 +4355,15 @@ msgstr "URL del enlace de parte del proveedor externo" msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Paquetes" @@ -4315,7 +4380,7 @@ msgstr "Cantidad de paquete" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "múltiple" @@ -4339,23 +4404,23 @@ msgstr "Fecha de última actualización de los datos de disponibilidad" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Moneda predeterminada utilizada para este proveedor" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Datos de la fila original" msgid "Errors" msgstr "Errores" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Válido" @@ -4623,7 +4688,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:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Desconocido" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupo" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Referencia del pedido" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Destacado" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Tiene Código de Proyecto" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Creado por" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Creado antes de" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Creado después de" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Tiene fecha inicial" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Fecha de inicio anterior" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Fecha de inicio después" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Tiene fecha límite" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Fecha objetivo antes" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Fecha objetivo después" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Tiene Precio" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Completado antes de" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Completado después de" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Orden" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Componente interno" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Orden pendiente" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Completados" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Tiene envío" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Orden de compra" msgid "Sales Order" msgstr "Orden de Venta" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Precio Total" msgid "Total price for this order" msgstr "Precio total para este pedido" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Moneda de pedido" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descripción del pedido (opcional)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Seleccione el código del proyecto para este pedido" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Enlace a Url externa" @@ -4930,7 +4995,7 @@ msgstr "Fecha de inicio" msgid "Scheduled start date for this order" msgstr "Fecha de inicio programada para este pedido" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" @@ -4963,12 +5028,12 @@ msgstr "Punto de contacto para este pedido" msgid "Company address for this order" msgstr "Dirección de la empresa para este pedido" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Estado" @@ -4992,15 +5057,15 @@ msgstr "Código de referencia de pedido del proveedor" msgid "received by" msgstr "recibido por" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "La fecha de pedido fue completada" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Destinación" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Destino para los artículos recibidos" @@ -5024,616 +5089,624 @@ msgstr "La cantidad debe ser un número positivo" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Estado de la orden de venta" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Referencia del cliente " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Código de referencia de pedido del cliente" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Fecha de envío" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "La orden ya fue completada" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "La orden ya fue cancelada" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Sólo una orden abierta puede ser marcada como completa" -#: order/models.py:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "Este pedido está bloqueado y no puede ser modificado" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Cantidad del artículo" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Referencia de partida" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Notas de partida" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Descripción de partida (opcional)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Contexto adicional para esta línea" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Precio unitario" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "La parte del proveedor debe coincidir con el proveedor" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Parte del proveedor" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Recibido" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Precio de Compra" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Precio de compra unitario" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Precio de Venta" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Precio de venta unitario" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Cantidad enviada" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Fecha del envío" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Fecha de entrega" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Fecha de entrega del envío" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Revisado por" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Número de envío" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Número de Seguimiento" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Información de seguimiento del envío" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Número de factura" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Número de referencia para la factura asociada" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "El envío ya ha sido enviado" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "El envío no tiene artículos de stock asignados" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 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:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La cantidad de asignación no puede exceder la cantidad de stock" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "La orden de venta no coincide con el envío" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 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:2614 +#: order/models.py:2645 msgid "Line" msgstr "Línea" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Referencia del envío del pedido de venta" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Ítem" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Seleccionar artículo de stock para asignar" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Especificar la cantidad de asignación de stock" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Referencia de la orden de devolución" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Empresa de la cual se están devolviendo los artículos" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Estado de la orden de devolución" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Seleccionar el artículo a devolver del cliente" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Fecha de recepción" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Resultado" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Salida para esta partida" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "ID del Pedido" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID del pedido a duplicar" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Copiar líneas" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Copiar elementos de línea del pedido original" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Copiar líneas adicionales" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Copiar elementos extra de la línea del pedido original" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Copiar Parámetros" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "ID de pedido no válido" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:862 +#: order/serializers.py:863 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:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1868 +#: order/serializers.py:1886 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:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "Categoría de parte" msgid "Part Categories" msgstr "Categorías de parte" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Ubicación Predeterminada" @@ -5849,7 +5926,7 @@ msgstr "Palabras clave por defecto para partes en esta categoría" msgid "Icon" msgstr "Icono" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" @@ -5870,984 +5947,1012 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Partes" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 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:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado no permitido en la configuración de partes" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "La revisión de parte duplicada ya existe." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Parte con este nombre, IPN y revisión ya existe." -#: part/models.py:1069 +#: part/models.py:1070 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:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Nombre de la parte" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Es plantilla" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "¿Es esta parte una parte de la plantilla?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Descripción de parte (opcional)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Palabras claves" -#: part/models.py:1133 +#: part/models.py:1134 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:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revisión" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Variante de" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "¿Dónde se almacena este artículo normalmente?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Expiración por defecto" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Stock mínimo" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Nivel mínimo de stock permitido" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Unidades de medida para esta parte" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "¿Se puede construir esta parte a partir de otras partes?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "¿Se puede utilizar esta parte para construir otras partes?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "¿Esta parte tiene seguimiento de objetos únicos?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta parte a proveedores externos?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "¿Se puede vender esta parte a los clientes?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "¿Está activa esta parte?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Las partes bloqueadas no pueden ser editadas" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Suma de verificación de BOM" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Suma de verificación de BOM almacenada" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "BOM comprobado por" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Fecha BOM comprobada" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Creación de Usuario" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Fecha" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 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:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Requerido" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Validado" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "En construcción" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 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:1563 +#: part/serializers.py:1552 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:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:2006 +#: part/serializers.py:2004 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:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "Impresión de etiquetas fallida" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "Proporciona soporte nativo para códigos de barras" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "Impresora de etiquetas PDF de InvenTree" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Proporciona soporte nativo para imprimir etiquetas PDF" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Modo de depuración" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Activar modo de depuración - devuelve código HTML en lugar de PDF" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "Dimensiones de etiqueta inválidas" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "Adjuntar al modelo al imprimir" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Guardar la salida del informe como un archivo adjunto contra la instancia del modelo enlazado al imprimir" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Patrón de Nombre de archivo" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtros" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Tamaño de página para reportes PDF" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Ancho [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Ancho de la etiqueta, especificado en mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Altura [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Altura de la etiqueta, especificada en mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Fragmento" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Archivo fragmento de informe" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Descripción de archivo de fragmento" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Activo" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Reportar archivo de activos" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Descripción del archivo de activos" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de serie" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Ubicación de Stock" @@ -8546,11 +8651,11 @@ msgstr "Ubicación de Stock" msgid "Stock Locations" msgstr "Ubicaciones de Stock" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Propietario" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Seleccionar Propietario" @@ -8558,7 +8663,7 @@ msgstr "Seleccionar Propietario" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Externo" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Se debe especificar la pieza" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "El objeto no puede pertenecer a sí mismo" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 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:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Artículo de stock padre" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Parte base" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Instalado en" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "¿Está este artículo instalado en otro artículo?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Cantidad de Stock" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Build de origen" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Build para este item de stock" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Orden de compra de origen" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Orden de compra para este artículo de stock" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Orden de venta de destino" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Eliminar al agotar" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Eliminar este artículo de stock cuando se agoten las existencias" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Precio de compra único en el momento de la compra" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Convertido a parte" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "La parte no está establecida como rastreable" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Cantidad debe ser un entero" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Los números de serie deben ser proporcionados como una lista" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "La cantidad no coincide con los números de serie" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 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:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Artículo de stock está instalado en otro artículo" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Artículo de stock contiene otros artículos" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Artículo de stock ha sido asignado a un cliente" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "El artículo de stock está en producción" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Los artículos de stock deben referirse a la misma parte" -#: stock/models.py:2106 +#: stock/models.py:2130 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:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Los códigos de estado del stock deben coincidir" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Notas de entrada" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Debe proporcionarse un valor para esta prueba" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "El archivo adjunto debe ser subido para esta prueba" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Resultado de la prueba" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Valor de salida de prueba" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Adjunto de resultados de prueba" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Notas de prueba" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Finalizó" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "Introduzca números de serie para nuevos artículos" msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Expirado" @@ -9466,131 +9579,131 @@ msgstr "Última vez que se usó el token" msgid "Revoked" msgstr "Revocado" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Permiso establecido" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Vista" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Permiso para ver artículos" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Añadir" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Permiso para añadir artículos" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Cambiar" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Permisos para editar artículos" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Eliminar" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Permiso para eliminar artículos" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" 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 b5c7c06e59..b4bba3f73e 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-05-03 02:23\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Spanish, Mexico\n" "Language: es_MX\n" @@ -89,6 +89,7 @@ msgstr "No se pudo convertir {original} a {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Cantidad proporcionada no válida" @@ -104,11 +105,11 @@ 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:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Error de conexión" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "El servidor respondió con código de estado no válido" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Se ha producido una excepción" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 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:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "El tamaño de la imagen es demasiado grande" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "La descarga de imagen excedió el tamaño máximo" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "El servidor remoto devolvió una respuesta vacía" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "La URL proporcionada no es un archivo de imagen válido" @@ -219,7 +220,7 @@ msgstr "Iniciar sesión en la aplicación" msgid "Email" msgstr "Correo electrónico" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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." @@ -263,124 +264,108 @@ msgstr "La referencia debe coincidir con la expresión regular {pattern}" msgid "Reference number is too large" msgstr "El número de referencia es demasiado grande" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Selección no válida" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nombre" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Descripción" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Descripción (opcional)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Ruta" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Los nombres duplicados no pueden existir bajo el mismo padre" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Notas de Markdown (opcional)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Datos de código de barras" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Datos de código de barras de terceros" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hash del Código de barras" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Hash único de datos de código de barras" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Error de servidor" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Se ha registrado un error por el servidor." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Debe ser un número válido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Moneda" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Seleccionar moneda de las opciones disponibles" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Imagen remota" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL de imagen remota" - -#: InvenTree/serializers.py:818 -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:825 -msgid "Failed to download image from remote URL" -msgstr "Error al descargar la imagen desde la URL remota" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ 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:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Estado del pedido" @@ -561,21 +546,21 @@ msgstr "Estado del pedido" msgid "Parent Build" msgstr "Construcción o Armado Superior" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Incluye Variantes" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Incluye Variantes" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Categoría" @@ -605,7 +590,7 @@ msgstr "Categoría" msgid "Ancestor Build" msgstr "Construir antepasado" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Asignado a mí" @@ -653,11 +638,11 @@ msgstr "Completado antes de" msgid "Completed after" msgstr "Completado después de" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "La compilación debe cancelarse antes de poder ser eliminada" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Consumible" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opcional" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Montaje" @@ -687,32 +672,32 @@ msgstr "Montaje" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Comprobable" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Pedido pendiente" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Asignadas" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "En pedido" @@ -720,7 +705,7 @@ msgstr "En pedido" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Construir órden" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Ubicación" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Número de orden de construcción o armado" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Estado de la construcción" msgid "Build status code" msgstr "Código de estado de construcción" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Numero de lote" @@ -870,8 +855,8 @@ msgstr "Numero de lote" msgid "Batch code for this build output" msgstr "Número de lote de este producto final" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Fecha de Creación" @@ -891,7 +876,7 @@ msgstr "Fecha límite de finalización" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Fecha de finalización" @@ -907,8 +892,8 @@ msgstr "Emitido por" msgid "User who issued this build order" msgstr "El usuario que emitió esta orden" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" @@ -917,12 +902,12 @@ msgstr "Responsable" msgid "User or group responsible for this build order" msgstr "Usuario o grupo responsable de esta orden de construcción" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Link externo" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Enlace a URL externa" @@ -934,8 +919,8 @@ msgstr "Prioridad de construcción" msgid "Priority of this build order" msgstr "Prioridad de esta orden de construcción" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Código del proyecto" @@ -968,7 +953,7 @@ msgstr "Pedido #[order] ha sido procesado" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "No se ha especificado salida de construcción" @@ -980,47 +965,47 @@ msgstr "La construcción de la salida ya está completa" 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La cantidad debe ser mayor que cero" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "La cantidad no puede ser mayor que la cantidad de salida" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Construir línea de pedido" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Ensamblar equipo" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Ensamblar equipo" msgid "Quantity" msgstr "Cantidad" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Cantidad requerida para orden de ensamble" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 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:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "La cantidad debe ser 1 para el stock serializado" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Artículo de stock sobreasignado" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artículo de stock" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Producto original de stock" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Cantidad de stock a asignar para construir" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Instalar en" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Artículo de stock de destino" @@ -1099,7 +1084,7 @@ msgstr "Artículo de stock de destino" msgid "Build Level" msgstr "Nivel de construcción" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Nombre de parte" @@ -1135,7 +1120,7 @@ msgstr "Cantidad entera requerida para partes rastreables" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de serie" @@ -1156,8 +1141,8 @@ msgstr "Autoasignar Números de Serie" 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:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Los siguientes números seriales ya existen o son inválidos" @@ -1245,7 +1230,7 @@ msgstr "Aceptar que los artículos de stock no se han asignado completamente a e msgid "Required stock has not been fully allocated" msgstr "El stock requerido no ha sido completamente asignado" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Aceptar incompleto" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part debe apuntar a la misma parte que la orden de construcció msgid "Item must be in stock" msgstr "El artículo debe estar en stock" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Cantidad disponible ({q}) excedida" @@ -1306,7 +1291,7 @@ msgstr "La salida de la construcción debe especificarse para la asignación de 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Debe proporcionarse la adjudicación de artículos" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Parte del proveedor" @@ -1404,7 +1389,7 @@ msgstr "Referencia de orden de Ensamblado" msgid "Part Category Name" msgstr "Nombre de la categoría por pieza" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Rastreable" @@ -1412,29 +1397,29 @@ msgstr "Rastreable" msgid "Inherited" msgstr "Heredado" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Item de Lista de Materiales" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "En producción" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Stock externo" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Stock Disponible" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "El usuario no tiene permiso para eliminar estos adjuntos" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "El usuario no tiene permiso para eliminar este adjunto" @@ -1554,610 +1543,634 @@ msgstr "Sin plugin" msgid "Project Code Label" msgstr "Etiqueta del código del proyecto" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Actualizado" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Fecha y hora de la última actualización" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Código único del proyecto" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Descripción del proyecto" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Usuario o grupo responsable de este projecto" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Tecla de ajustes" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Valor de ajuste" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "El valor elegido no es una opción válida" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "El valor debe ser un valor booleano" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "El valor debe ser un entero" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "El valor debe ser un número válido" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "El valor no pasa las comprobaciones de validación" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Cadena de clave debe ser única" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Usuario" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Cantidad de salto de precio" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Precio" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Precio unitario a la cantidad especificada" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Endpoint" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Punto final en el que se recibe este webhook" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Nombre para este webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activo" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Está activo este webhook" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token para el acceso" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Clave" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Secreto compartido para HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID de mensaje" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Identificador único para este mensaje" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Servidor desde el cual se recibió este mensaje" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Encabezado" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Encabezado del mensaje" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Cuerpo" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Cuerpo de este mensaje" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Endpoint en el que se recibió este mensaje" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Trabajado en" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "¿El trabajo en este mensaje ha terminado?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Título" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Enlace" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Publicado" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Resumen" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Leer" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "¿Esta noticia ya fue leída?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Archivo de imagen" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Tipo de modelo destino para esta imagen" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Unidad personalizada" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "El símbolo de la unidad debe ser único" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Nombre de unidad debe ser un identificador válido" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Nombre de unidad" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Símbolo de unidad opcional" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definición" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definición de unidad" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Archivo adjunto" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Archivo no encontrado" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Falta enlace externo" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Seleccionar archivo para adjuntar" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Comentario" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Comentario de archivo adjunto" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Fecha de carga" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Fecha de carga del archivo" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Tamaño del archivo" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Tamaño del archivo en bytes" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo de modelo no válido especificado para el archivo adjunto" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Conjunto de estado de referencia" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Conjunto de estado extendido con este estado personalizado" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Llave lógica" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Valor" -#: common/models.py:2121 +#: common/models.py:2196 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:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Nombre del estado" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que se mostrará en el frontend" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Color" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Color que se mostrará en el frontend" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Modelo" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Modelo con el que este estado está asociado" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "El modelo debe ser seleccionado" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "La clave debe ser seleccionada" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "La clave lógica debe ser seleccionada" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "La clave debe ser distinta de la clave lógica" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Debe proporcionarse una clase de estado de referencia válida" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Lista de selección" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Listas de Selección" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Nombre de la lista de selección" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Descripción de la lista de selección" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "¿Está bloqueada esta lista de selección?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "¿Se puede utilizar esta lista de selección?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Complemento de origen" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Complemento que proporciona la lista de selección" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Cadena de origen" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "Cadena opcional que identifica la fuente usada para esta lista" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Entrada por defecto" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Entrada predeterminada para esta lista de selección" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Creado" -#: common/models.py:2303 +#: common/models.py:2378 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:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Última actualización" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Entrada de lista de selección" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Entradas de la lista de selección" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Lista de selección a la que pertenece esta entrada" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Valor del elemento de la lista de selección" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Etiqueta para la entrada de lista de selección" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Descripción de la entrada de lista de selección" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "¿Está activa esta entrada de la lista de selección?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Plantilla de parámetro" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "El nombre de parámetro en la plantilla tiene que ser único" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Nombre de Parámetro" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Unidades" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Casilla de verificación" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "¿Es este parámetro una casilla de verificación?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Opciones" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opciones válidas para este parámetro (separados por comas)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Lista de selección para este parámetro" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Opción inválida para el valor del parámetro" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Plantilla" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Datos" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Valor del parámetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Valor del parámetro" msgid "Note" msgstr "Nota" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo de nota opcional" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Escanear código de barras" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Datos de código de barras" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Usuario que escaneó el código de barras" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Fecha y hora del escaneo de código de barras" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "Dispositivo URL que procesó el código de barras" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Datos de contexto para el escaneo de código de barras" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Respuesta" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Respuesta de datos del escaneo de código de barras" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Resultado" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "¿El escaneo de código de barras fue exitoso?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clave" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Artículos Recibidos" @@ -2457,7 +2470,7 @@ msgstr "Nombre de Archivo" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "Intervalo de actualización de moneda" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "días" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Plugin de actualización de moneda a usar" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Descargar desde URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Límite de tamaño de descarga" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Tamaño máximo de descarga permitido para la imagen remota" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "Agente de usuario usado para descargar desde la URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Validación estricta de URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Requerir especificación de esquema al validar URLs" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Actualizar intervalo de actualización" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Copia de seguridad automática" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Intervalo de respaldo automático" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Intervalo de eliminación de tareas" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Intervalo de eliminación de registro de errores" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Intervalo de eliminación de notificaciones" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Soporte de código de barras" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Guardar resultados de código de barras" -#: common/setting/system.py:383 +#: common/setting/system.py:363 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:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Número máximo de escaneos de código de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:369 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:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Retraso de entrada de código de barras" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Tiempo de retraso en la lectura de códigos de barras" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Soporte para Webcam de código de barras" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 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:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Complemento para generar códigos de barra" -#: common/setting/system.py:414 +#: common/setting/system.py:394 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:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Revisiones de partes" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisión para parte" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:438 +#: common/setting/system.py:418 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:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Permitir IPN duplicado" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que varias partes compartan el mismo IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Permitir editar IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Copiar parte de datos BOM" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "Copiar datos BOM por defecto al duplicar una parte" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Copiar parámetros de parte" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Copiar parte de datos de prueba" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Copiar plantillas de parámetros de categoría" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Las partes son plantillas por defecto" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Componente" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "Las partes pueden ser usadas como subcomponentes por defecto" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Comprable" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Las partes son comprables por defecto" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Vendible" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Las partes se pueden vender por defecto" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Las partes son rastreables por defecto" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Las partes son virtuales por defecto" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Mostrar partes relacionadas" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Mostrar partes relacionadas para una parte" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Datos iniciales de existencias" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Datos iniciales del proveedor" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Formato de visualización de Nombre de Parte" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Formato para mostrar el nombre de la parte" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Icono por defecto de la categoría de parte" -#: common/setting/system.py:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de lugares decimales en el precio" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Máximo de lugares decimales en el precio" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Usar precios de proveedor" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Anulación del historial de compra" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Usar precio del artículo de almacén" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Edad del precio del artículo de almacén" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Usar precios variantes" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir variantes de precios en los cálculos generales de precios" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Solo variantes activas" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Intervalo de reconstrucción de precios" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Precios internos" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Habilitar precios internos para partes" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Anulación del precio interno" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Habilitar impresión de etiquetas" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Habilitar impresión de etiquetas desde la interfaz web" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "PPP de la imagen de etiqueta" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Habilitar informes" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Habilitar generación de informes" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Modo de depuración" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Generar informes en modo de depuración (salida HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Registrar errores de reportes" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Registrar errores ocurridos al generar reportes" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Tamaño de página" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Tamaño de página predeterminado para informes PDF" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Forzar unidades de parámetro" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Seriales únicos globalmente" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Eliminar existencias agotadas" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Plantilla de código de lote" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Expiración de stock" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Habilitar la funcionalidad de expiración de stock" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Vender existencias caducadas" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Permitir venta de existencias caducadas" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Tiempo histórico de Stock" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Crear Stock Caducado" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Permitir crear con stock caducado" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Control de Stock" -#: common/setting/system.py:753 +#: common/setting/system.py:745 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:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Icono por defecto de ubicación de almacén" -#: common/setting/system.py:759 +#: common/setting/system.py:751 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:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Mostrar Articulos de Stock Instalados" -#: common/setting/system.py:765 +#: common/setting/system.py:757 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:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Revisar BOM al instalar artículos" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Permitir transferencia Sin Existencias" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Patrón de Referencia de Ordenes de Armado" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Requerir Dueño Responsable" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 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:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Requerir Parte Activa" -#: common/setting/system.py:799 +#: common/setting/system.py:791 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:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Requerir Parte Bloqueada" -#: common/setting/system.py:805 +#: common/setting/system.py:797 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:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Bloquear hasta que los Tests pasen" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Los pedidos marcados como enviados se completarán automáticamente, evitando el estado de \"envío\"" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Patrón de Referencia de Orden de Compra" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Editar Ordenes de Compra Completados" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Ordenes de compra" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Habilitar función de contraseña olvidada" -#: common/setting/system.py:946 +#: common/setting/system.py:954 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:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Habilitar registro" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Habilitar SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Habilitar SSO en las páginas de inicio de sesión" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Habilitar registro SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Habilitar sincronización de grupo SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "Clave de grupo SSO" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "Mapa del grupo SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Eliminar grupos fuera de SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email requerido" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Requiere usuario para suministrar correo al registrarse" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Auto-rellenar usuarios SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Correo dos veces" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Contraseña dos veces" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Dominios permitidos" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Grupo al registrarse" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Forzar MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Los usuarios deben utilizar seguridad multifactor." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Comprobar complementos al iniciar" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Revisar actualizaciones del plugin" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Habilitar comprobaciones periódicas para actualizaciones de plugins instalados" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Habilitar integración de URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Habilitar plugins para añadir rutas de URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Habilitar integración de navegación" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Habilitar plugins para integrar en la navegación" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Habilitar integración de la aplicación" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Habilitar plugins para añadir aplicaciones" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Habilitar integración de programación" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Habilitar plugins para ejecutar tareas programadas" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Habilitar integración de eventos" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Habilitar plugins para responder a eventos internos" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Habilitar integración de interfaz" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Habilitar complementos para integrar en la interfaz de usuario" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Excluir Ubicaciones Externas" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Periodo de inventario automático" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Mostrar nombres completos de los usuarios" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Mostrar nombres completos de usuarios en lugar de nombres de usuario" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Habilitar datos de estación de prueba" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 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:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "Últimas impresoras usadas" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Fabricante" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Correo electrónico de contacto" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Contacto" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Dirección" @@ -4203,12 +4268,12 @@ msgstr "Notas de envío para uso interno" msgid "Link to address information (external)" msgstr "Enlace a información de dirección (externa)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Parte del fabricante" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Parte base" @@ -4221,8 +4286,8 @@ msgstr "Seleccionar parte" msgid "Select manufacturer" msgstr "Seleccionar fabricante" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "Las unidades de paquete deben ser mayor que cero" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Proveedor" msgid "Select supplier" msgstr "Seleccionar proveedor" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Unidad de mantenimiento de stock de proveedores" @@ -4290,15 +4355,15 @@ msgstr "URL del enlace de parte del proveedor externo" msgid "Supplier part description" msgstr "Descripción de la parte del proveedor" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Cargo mínimo (p. ej., cuota de almacenamiento)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Paquetes" @@ -4315,7 +4380,7 @@ msgstr "Cantidad de paquete" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "múltiple" @@ -4339,23 +4404,23 @@ msgstr "Fecha de última actualización de los datos de disponibilidad" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Moneda predeterminada utilizada para este proveedor" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Nombre de la empresa" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Datos de la fila original" msgid "Errors" msgstr "Errores" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Válido" @@ -4623,7 +4688,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:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Desconocido" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupo" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Referencia del pedido" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Destacado" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Tiene Código de Proyecto" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Creado por" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Creado antes de" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Creado después de" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Fecha objetivo antes de" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Fecha objetivo después de" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Tiene Precio" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Completado antes de" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Completado después de" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Orden" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Orden completada" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Componente interno" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Orden pendiente" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Completados" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Tiene envío" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Orden de compra" msgid "Sales Order" msgstr "Orden de Venta" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Precio Total" msgid "Total price for this order" msgstr "Precio total para este pedido" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Moneda de pedido" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descripción del pedido (opcional)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Seleccione el código del proyecto para este pedido" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Enlace a Url externa" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Fecha objetivo" @@ -4963,12 +5028,12 @@ msgstr "Punto de contacto para este pedido" msgid "Company address for this order" msgstr "Dirección de la empresa para este pedido" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Referencia del pedido" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Estado" @@ -4992,15 +5057,15 @@ msgstr "Código de referencia de pedido del proveedor" msgid "received by" msgstr "recibido por" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "La fecha de pedido fue completada" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Destinación" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Destino para los artículos recibidos" @@ -5024,616 +5089,624 @@ msgstr "La cantidad debe ser un número positivo" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Empresa a la que se venden los artículos" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Estado de la orden de venta" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Referencia del cliente " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Código de referencia de pedido del cliente" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Fecha de envío" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "La orden ya fue completada" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "La orden ya fue cancelada" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Sólo una orden abierta puede ser marcada como completa" -#: order/models.py:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Cantidad del artículo" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Referencia de partida" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Notas de partida" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Descripción de partida (opcional)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Contexto adicional para esta línea" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Precio unitario" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "La parte del proveedor debe coincidir con el proveedor" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Parte del proveedor" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Recibido" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Número de artículos recibidos" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Precio de Compra" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Precio de compra unitario" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Precio de Venta" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Precio de venta unitario" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Cantidad enviada" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Fecha del envío" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Fecha de entrega" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Fecha de entrega del envío" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Revisado por" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Usuario que revisó este envío" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envío" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Número de envío" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Número de Seguimiento" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Información de seguimiento del envío" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Número de factura" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Número de referencia para la factura asociada" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "El envío ya ha sido enviado" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "El envío no tiene artículos de stock asignados" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "El artículo de stock no ha sido asignado" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 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:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La cantidad de asignación no puede exceder la cantidad de stock" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Cantidad asignada debe ser mayor que cero" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "La cantidad debe ser 1 para el stock serializado" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "La orden de venta no coincide con el envío" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 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:2614 +#: order/models.py:2645 msgid "Line" msgstr "Línea" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Referencia del envío del pedido de venta" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Ítem" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Seleccionar artículo de stock para asignar" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Especificar la cantidad de asignación de stock" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Referencia de la orden de devolución" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Empresa de la cual se están devolviendo los artículos" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Estado de la orden de devolución" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "El artículo de almacén debe ser especificado" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "La cantidad de retorno excede la cantidad de existencias" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "La cantidad de retorno debe ser mayor que cero" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Cantidad inválida para el artículo de stock serializado" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Seleccionar el artículo a devolver del cliente" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Fecha de recepción" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Resultado" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Salida para esta partida" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "ID del Pedido" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID del pedido a duplicar" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Copiar líneas" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Copiar partida del pedido original" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Copiar líneas adicionales" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Copiar partidas extra del pedido original" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Copiar Parámetros" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Líneas completadas" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Duplicar pedido" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Especificar opciones para duplicar este pedido" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "ID de pedido inválido" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Nombre del proveedor" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "El pedido no puede ser cancelado" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Permitir cerrar el pedido con partidas incompletas" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "El pedido tiene partidas incompletas" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "El pedido no está abierto" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Precio automático" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Moneda del precio de compra" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Combinar artículos" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Número de parte interna" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Nombre interno de parte" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Debe especificar la parte del proveedor" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "La orden de compra debe especificarse" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "El proveedor debe coincidir con la orden de compra" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "La orden de compra debe coincidir con el proveedor" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Partida" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Seleccione la ubicación de destino para los artículos recibidos" -#: order/serializers.py:862 +#: order/serializers.py:863 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:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Fecha de Expiración" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Introduzca números de serie para artículos de almacén entrantes" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Código de barras escaneado" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Código de barras en uso" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Se deben proporcionar las partidas" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Se requiere ubicación de destino" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Los valores del código de barras deben ser únicos" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Envíos" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Envíos completados" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Moneda del precio de venta" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Elementos asignados" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "No se proporcionaron detalles de envío" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "La partida no está asociada con este pedido" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "La cantidad debe ser positiva" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Introduzca números de serie para asignar" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "El envío ya ha sido enviado" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "El envío no está asociado con este pedido" -#: order/serializers.py:1868 +#: order/serializers.py:1886 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:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Los siguientes números de serie no están disponibles" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Partida de orden de devolución" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "La partida no coincide con la orden de devolución" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "La partida ya ha sido recibida" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Cantidad a devolver" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Moneda de precio de línea" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "Categoría de parte" msgid "Part Categories" msgstr "Categorías de parte" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Ubicación Predeterminada" @@ -5849,7 +5926,7 @@ msgstr "Palabras clave por defecto para partes en esta categoría" msgid "Icon" msgstr "Icono" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icono (opcional)" @@ -5870,984 +5947,1012 @@ msgstr "Valor predeterminado" msgid "Default Parameter Value" msgstr "Valor de parámetro por defecto" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Partes" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 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:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN duplicado no permitido en la configuración de partes" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "La revisión de parte duplicada ya existe." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Parte con este nombre, IPN y revisión ya existe." -#: part/models.py:1069 +#: part/models.py:1070 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:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Nombre de la parte" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Es plantilla" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "¿Es esta parte una parte de la plantilla?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Descripción de parte (opcional)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Palabras claves" -#: part/models.py:1133 +#: part/models.py:1134 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:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Categoría de parte" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Revisión de parte o número de versión" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revisión" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "¿Es esta parte una variante de otra parte?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Variante de" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "¿Dónde se almacena este artículo normalmente?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Expiración por defecto" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Stock mínimo" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Nivel mínimo de stock permitido" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Unidades de medida para esta parte" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "¿Se puede construir esta parte a partir de otras partes?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "¿Se puede utilizar esta parte para construir otras partes?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "¿Esta parte tiene seguimiento de objetos únicos?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "¿Se puede comprar esta parte a proveedores externos?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "¿Se puede vender esta parte a los clientes?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "¿Está activa esta parte?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Las partes bloqueadas no pueden ser editadas" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Suma de verificación de BOM" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Suma de verificación de BOM almacenada" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "BOM comprobado por" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Fecha BOM comprobada" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Creación de Usuario" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Dueño responsable de esta parte" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Vender múltiples" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Moneda utilizada para almacenar en caché los cálculos de precios" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Costo mínimo de BOM" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Costo mínimo de partes de componentes" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Costo máximo de BOM" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Costo máximo de partes de componentes" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Costo mínimo de compra" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Costo histórico mínimo de compra" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Costo máximo de compra" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Costo histórico máximo de compra" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Precio interno mínimo" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Costo mínimo basado en precios reducidos internos" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Precio interno máximo" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Costo máximo basado en precios reducidos internos" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Precio mínimo de proveedor" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Precio mínimo de la parte de proveedores externos" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Precio máximo de proveedor" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Precio máximo de la parte de proveedores externos" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Costo mínimo de variante" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Costo mínimo calculado de las partes variantes" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Costo máximo de variante" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Costo máximo calculado de las partes variantes" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Costo mínimo" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Anular el costo mínimo" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Costo máximo" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Reemplazar coste máximo" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Costo mínimo general calculado" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Precio de venta mínimo" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Precio de venta mínimo basado en precios reducidos" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Precio de venta máximo" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Precio de venta máximo basado en precios reducidos" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Costo de venta mínimo" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Precio de venta mínimo histórico" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Costo de Venta Máximo" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Precio de venta máximo histórico" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Número de artículos" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Fecha" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Costo de Stock Mínimo" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Costo mínimo estimado del stock disponible" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 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:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Nombre de prueba" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Introduzca un nombre para la prueba" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Descripción de prueba" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Introduce la descripción para esta prueba" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Requerido" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "¿Es necesario pasar esta prueba?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Requiere valor" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Adjunto obligatorio" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Seleccionar parte principal" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Sub parte" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Seleccionar parte a utilizar en BOM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Cantidad del artículo en BOM" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Este artículo BOM es opcional" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Referencia de artículo de BOM" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Notas del artículo de BOM" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Suma de verificación" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Suma de verificación de línea de BOM" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Validado" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Este artículo de BOM ha sido validado" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "La cantidad debe ser un valor entero para las partes rastreables" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Debe especificar la subparte" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Ítem de BOM sustituto" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Artículo BOM superior" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Sustituir parte" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Seleccionar parte relacionada" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Nota para esta relación" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Categoría principal de parte" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Subcategorías" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moneda de compra de ítem de stock" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Parte original" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Seleccione la parte original a duplicar" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Copiar Imagen" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Copiar imagen desde la parte original" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Copiar BOM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Copiar la factura de materiales de la parte original" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Copiar datos del parámetro de la parte original" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Cantidad Inicial de Stock" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Seleccione proveedor (o déjelo en blanco para saltar)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleccionar fabricante (o dejar en blanco para saltar)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Número de parte del fabricante" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "La empresa seleccionada no es un proveedor válido" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "La empresa seleccionada no es un fabricante válido" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Nombre de categoría" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "En construcción" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Elementos de stock" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Inventario Total" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Duplicar Parte" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Stock Inicial" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Crear Parte con cantidad inicial de stock" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Información del proveedor" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Añadir información inicial del proveedor para esta parte" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Copiar Parámetros de Categoría" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Copiar plantillas de parámetro de la categoría de partes seleccionada" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Imagen Existente" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "El archivo de imagen no existe" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Validación de Lista de Materiales" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Puede construir" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Precio mínimo" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Anular el valor calculado para precio mínimo" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Precio mínimo de moneda" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Precio máximo" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Precio máximo de moneda" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Actualizar" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 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:1563 +#: part/serializers.py:1552 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:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Seleccionar parte de la que copiar BOM" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Eliminar Datos Existentes" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Eliminar artículos BOM existentes antes de copiar" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Incluye Heredado" -#: part/serializers.py:2006 +#: part/serializers.py:2004 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:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Omitir filas no válidas" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Activar esta opción para omitir filas inválidas" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Copiar partes sustitutas" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "Impresión de etiquetas fallida" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "Proporciona soporte nativo para códigos de barras" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "Impresora de etiquetas PDF de InvenTree" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Proporciona soporte nativo para imprimir etiquetas PDF" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Modo de depuración" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Activar modo de depuración - devuelve código HTML en lugar de PDF" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "Dimensiones de etiqueta inválidas" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "Adjuntar al modelo al imprimir" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Guardar la salida del informe como un archivo adjunto contra la instancia del modelo enlazado al imprimir" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Patrón de Nombre de archivo" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtros" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Tamaño de página para reportes PDF" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Ancho [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Ancho de la etiqueta, especificado en mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Altura [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Altura de la etiqueta, especificada en mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Fragmento" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Archivo fragmento de informe" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Descripción de archivo de fragmento" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Activo" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Reportar archivo de activos" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Descripción del archivo de activos" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de serie" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Ubicación de Stock" @@ -8546,11 +8651,11 @@ msgstr "Ubicación de Stock" msgid "Stock Locations" msgstr "Ubicaciones de Stock" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Propietario" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Seleccionar Propietario" @@ -8558,7 +8663,7 @@ msgstr "Seleccionar Propietario" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Externo" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Se debe especificar la pieza" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "El objeto no puede pertenecer a sí mismo" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 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:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Artículo de stock padre" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Parte base" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "¿Dónde se encuentra este artículo de stock?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Empaquetar este artículo de stock se almacena en" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Instalado en" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "¿Está este artículo instalado en otro artículo?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Número de serie para este artículo" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código de lote para este artículo de stock" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Cantidad de Stock" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Build de origen" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Build para este item de stock" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Orden de compra de origen" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Orden de compra para este artículo de stock" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Orden de venta de destino" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Eliminar al agotar" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Eliminar este artículo de stock cuando se agoten las existencias" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Precio de compra único en el momento de la compra" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Convertido a parte" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "La parte no está establecida como rastreable" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Cantidad debe ser un entero" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Los números de serie deben ser proporcionados como una lista" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "La cantidad no coincide con los números de serie" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 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:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Artículo de stock está instalado en otro artículo" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Artículo de stock contiene otros artículos" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Artículo de stock ha sido asignado a un cliente" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "El artículo de stock está en producción" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Stock serializado no puede ser combinado" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Artículos de Stock Duplicados" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Los artículos de stock deben referirse a la misma parte" -#: stock/models.py:2106 +#: stock/models.py:2130 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:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Los códigos de estado del stock deben coincidir" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Notas de entrada" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Debe proporcionarse un valor para esta prueba" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "El archivo adjunto debe ser subido para esta prueba" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Resultado de la prueba" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Valor de salida de prueba" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Adjunto de resultados de prueba" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Notas de prueba" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Finalizó" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "Introduzca números de serie para nuevos artículos" msgid "Supplier Part Number" msgstr "Número de pieza del proveedor" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Expirado" @@ -9466,131 +9579,131 @@ msgstr "Última vez que se usó el token" msgid "Revoked" msgstr "Revocado" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Permiso establecido" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Vista" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Permiso para ver artículos" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Añadir" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Permiso para añadir artículos" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Cambiar" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Permisos para editar artículos" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Eliminar" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Permiso para eliminar artículos" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/et/LC_MESSAGES/django.po index 0c58f7e8e2..ac5f2ae637 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:09\n" "Last-Translator: \n" "Language-Team: Estonian\n" "Language: et_EE\n" @@ -89,6 +89,7 @@ msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "" @@ -104,11 +105,11 @@ msgstr "Pane kuupäev" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Ühenduse viga" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Esines tõrge" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "E-post" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Vigane valik" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Kirjeldus" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Kirjeldus (valikuline)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Tee" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Serveri viga" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Valikuline" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "Jälgitud" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Asukoht" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Koostamise olek" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Loomise kuupäev" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "Kogus" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Osa nimi" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Jälgitav" @@ -1412,29 +1397,29 @@ msgstr "Jälgitav" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Saadaval laos" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "Pluginat pole" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Uuendatud" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Seade võti" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Seade väärtus" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "ID" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Pealkiri" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Avaldatud" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Kokkuvõte" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Loetud" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Pildifail" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Ühiku nimi" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Sümbol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definitsioon" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Ühiku definitsioon" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Manus" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Puuduv fail" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Puuduv väline link" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Vali fail, mida lisada" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Kommentaar" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Faili suurus" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Silt" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Loodud" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Mall" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Andmed" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "Märkus" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Vöötkoodi andmed" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Vastus" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Tulemus" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 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:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "Failinimi" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Mudeli liik" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "päeva" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automaatne varundus" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Vöötkoodi tugi" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Ostetav" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuaalne" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Lehe suurus" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Luba liidese integreerimine" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Luba pluginatel integreeruda kasutajaliidesesse" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Tootja" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Kontakt e-postiaadress" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Aadress" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Tarnija" msgid "Select supplier" msgstr "Vali tarnija" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupp" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Staatus" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Müügihind" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Saadetud" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Saadetis" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Rida" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "Tellimuse ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "Kopeeritava tellimuse ID" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Kopeeri read" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Kopeeri reaüksused algsest tellimusest" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Kopeeri lisareaüksused algsest tellimusest" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Kopeeri parameetrid" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Määrake selle tellimuse dubleerimise valikud" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Vale tellimuse ID" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Tootekood" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Vöötkood" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Skännitud ribakood" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Saadetised" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Järgmised seerianumbrid ei ole saadaval" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "Osa kategooria" msgid "Part Categories" msgstr "Osa kategooriad" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "Ikoon" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikoon (valikuline)" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Osad" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Osa nimi" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "On mall" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Märksõnad" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Osa kategooria" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimaalne laoseis" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "Testimalle saab luua ainult testitavate osade jaoks" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Originaalosa" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Kopeeri pilt" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Kategooria nimi" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Ehitamine" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Tarnija info" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Minimaalne hind" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Maksimaalne hind" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Uuenda" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "Piirjoon" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "Lisa mudelile printimisel" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Salvesta aruande väljund manusega seotud mudeli eksemplari juurde printimisel" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtrid" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Mallifaili" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seerianumber" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Testitulemused" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "Tarnija osa number" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "Tühistatud" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Vaade" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Muuda" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Kustuta" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fa/LC_MESSAGES/django.po index b9cf4f8fef..5bda507b9e 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Persian\n" "Language: fa_IR\n" @@ -89,6 +89,7 @@ msgstr "نمی‌توان {original} را به {unit} تبدیل کرد" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "مقدار ارائه شده نامعتبر است" @@ -104,11 +105,11 @@ msgstr "تاریخ را وارد کنید" msgid "Invalid decimal value" msgstr "مقدار اعشاری نامعتبر است" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "خطا در اتصال" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "سرور با کد وضعیت نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "یک استثنا رخ داده است" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "سرور با مقدار طول محتوا نامعتبر پاسخ داد" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "اندازه عکس بسیار بزرگ است" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "حجم دانلود تصویر از حداکثر اندازه بیشتر شده است" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "سرور ریموت پاسخ خالی را برگرداند" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "URL ارائه شده یک فایل تصویری معتبر نیست" @@ -219,7 +220,7 @@ msgstr "وارد برنامه شوید" msgid "Email" msgstr "ایمیل" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "قبل از انجام هر کار دیگری باید احراز هویت دو مرحله ای را فعال کنید." @@ -263,124 +264,108 @@ msgstr "مرجع باید با الگوی مورد نیاز مطابقت داش msgid "Reference number is too large" msgstr "شماره مرجع خیلی بزرگ است" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "انتخاب نامعتبر" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "نام" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "توضیحات" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "توضیحات (اختیاری)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "مسیر" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "نام‌های تکراری نمی‌توانند تحت یک والد وجود داشته باشند" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "یادداشت های علامت گذاری (اختیاری)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "داده های بارکد" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "داده های بارکد شخص ثالث" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "هش بارکد" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "هش منحصر به فرد داده های بارکد" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "بارکد موجود پیدا شد" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "خطای سرور" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "یک خطا توسط سرور ثبت شده است." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "باید یک عدد معتبر باشد" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "ارز" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "ارز را از گزینه های موجود انتخاب کنید" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "مقدار نامعتبر" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "تصویر ریموت" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "آدرس فایل تصویری از راه دور" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "دانلود تصاویر از URL ریموت فعال نیست" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "دانلود تصویر از URL ریموت انجام نشد" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "واحد فیزیکی نامعتبر" msgid "Not a valid currency code" msgstr "کد ارز معتبر" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "وضعیت سفارش" @@ -561,21 +546,21 @@ msgstr "وضعیت سفارش" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "قطعه" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "دسته" @@ -605,7 +590,7 @@ msgstr "دسته" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "واگذار شده به من" @@ -653,11 +638,11 @@ msgstr "تکمیل شده قبل از" msgid "Completed after" msgstr "تکمیل شده بعد از" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "مصرفی" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "اختیاری" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "مونتاژ" @@ -687,32 +672,32 @@ msgstr "مونتاژ" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "سفارش معوق" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "اختصاص داده شده" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "سفارش ساخت" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "مکان" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "تاریخ تکمیل" @@ -907,8 +892,8 @@ msgstr "صادر شده توسط" msgid "User who issued this build order" msgstr "کاربری که این سفارش ساخت را صادر کرده است" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "پیوند خارجی" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 -msgid "Model type" -msgstr "" - -#: common/models.py:1997 -msgid "Target model type for image" -msgstr "" - -#: common/models.py:2005 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:2021 -msgid "Comment" +#: common/models.py:2019 +msgid "No file attached to rename" msgstr "" #: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 +msgid "Model type" +msgstr "" + +#: common/models.py:2072 +msgid "Target model type for image" +msgstr "" + +#: common/models.py:2080 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:2096 +msgid "Comment" +msgstr "" + +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fi/LC_MESSAGES/django.po index b2bb175db0..d2c4c54d3a 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Finnish\n" "Language: fi_FI\n" @@ -89,6 +89,7 @@ msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Annettu määrä on virheellinen" @@ -104,11 +105,11 @@ msgstr "Anna päivämäärä" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Yhteysvirhe" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Palvelin vastasi virheellisellä tilakoodilla" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Kuva on liian iso" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Kuvan lataus ylitti enimmäiskoon" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Etäpalvelin palautti tyhjän vastauksen" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Annettu URL ei ole kelvollinen kuvatiedosto" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "Sähköposti" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "Viitenumero on liian suuri" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Virheellinen valinta" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nimi" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Kuvaus" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Kuvaus (valinnainen)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Polku" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Viivakoodin Tiedot" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Palvelinvirhe" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Täytyy olla kelvollinen luku" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuutta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Valitse valuutta käytettävissä olevista vaihtoehdoista" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Virheellinen arvo" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "Kuvatiedoston URL" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Kuvien lataaminen ei ole käytössä" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Osa" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -605,7 +590,7 @@ msgstr "Kategoria" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Sijainti" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Ulkoinen linkki" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Linkki ulkoiseen URLiin" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "Määrä" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Varastotuote" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sarjanumerot" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Seurattavissa" @@ -1412,29 +1397,29 @@ msgstr "Seurattavissa" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Päivitetty" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Viimeisimmän päivityksen aikaleima" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Käyttäjä" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Hinta" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiivinen" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Salaisuus" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Isäntä" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Otsikko" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Linkki" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Julkaistu" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Julkaisija" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Yhteenveto" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Kuvatiedosto" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Liite" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Puuttuva tiedosto" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Puuttuva ulkoinen linkki" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Valitse liitettävä tiedosto" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Kommentti" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Arvo" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Käytössä" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "Muistiinpano" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Avain" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "Tiedostonimi" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "päivää" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automaattinen varmuuskopionti" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Ota käyttöön tietokannan ja mediatiedostojen automaattinen varmuuskopiointi" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Automaattisen varmuuskopioinnin aikaväli" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Viivakoodituki" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponentti" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Ostettavissa" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Sisäiset hinnat" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Sisäisen hinnan ohitus" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Sivun koko" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Salli salasananpalautus" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Salli rekisteröinti" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Salli SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Salli SSO kirjautumissivuilla" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Salli SSO rekisteröinti" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Sähköposti vaaditaan" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Sähköpostiosoite kahdesti" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Salasana kahdesti" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Sallitut verkkotunnukset" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Pakota MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Valmistaja" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontakti" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Osoite" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "Valitse valmistaja" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Toimittaja" msgid "Select supplier" msgstr "Valitse toimittaja" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Toimittajan varastonimike" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Ryhmä" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Valmis" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Hinta yhteensä" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Tilauksen valuutta" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Tilauksen viite" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Tila" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Asiakas" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Asiakkaan viite " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Vastaanotettu" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Lähetetty" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Seurantakoodi" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Laskunumero" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Viivakoodi" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "Kuvake" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Kuvake (valinnainen)" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Avainsanat" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Päivämäärä" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Valmistajan osanumero" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Suodattimet" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Leveys [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Korkeus [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sarjanumero" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Näytä" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Oikeus tarkastella kohteita" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Oikeus lisätä kohteita" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Muuta" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Oikeus muokata kohteita" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Poista" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Oikeus poistaa kohteita" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/fr/LC_MESSAGES/django.po index d432eecce2..55d8b2aaf4 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: French\n" "Language: fr_FR\n" @@ -89,6 +89,7 @@ msgstr "Impossible de convertir {original} en {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Quantité fournie invalide" @@ -104,11 +105,11 @@ msgstr "Entrer la date" msgid "Invalid decimal value" msgstr "Valeur décimale invalide" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Erreur de connexion" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Le serveur a répondu avec un code de statut invalide" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Une erreur est survenue" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 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:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Image trop volumineuse" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "La taille de l'image dépasse la taille maximale autorisée" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Le serveur distant a renvoyé une réponse vide" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "L'URL fournie n'est pas un fichier image valide" @@ -219,7 +220,7 @@ msgstr "Se connecter à l'application" msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Vous devez activer l'authentification à deux facteurs avant toute autre chose." @@ -263,124 +264,108 @@ msgstr "La référence doit correspondre au modèle requis" msgid "Reference number is too large" msgstr "Le numéro de référence est trop grand" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Choix invalide" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nom" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Description" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Description (facultative)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Chemin d'accès" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Les noms dupliqués ne peuvent pas exister sous le même parent" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Notes Markdown (option)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Données du code-barres" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Données de code-barres tierces" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hash du code-barre" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Hachage unique des données du code-barres" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Code-barres existant trouvé" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Erreur serveur" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Une erreur a été loguée par le serveur." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Doit être un nombre valide" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Devise" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Sélectionnez la devise à partir des options disponibles" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Ce champ ne peut pas être vide." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Valeur non valide" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Images distantes" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL du fichier image distant" - -#: InvenTree/serializers.py:818 -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:825 -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:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Format du type de contenu invalide" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "Type de contenu introuvable" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "Le type de contenu ne correspond pas à la classe de mixin requise" @@ -552,8 +537,8 @@ msgstr "Unité invalide" msgid "Not a valid currency code" msgstr "Code de devise invalide" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Statut de la commande" @@ -561,21 +546,21 @@ msgstr "Statut de la commande" msgid "Parent Build" msgstr "Fabrication parente" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Inclure les variantes" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Inclure les variantes" msgid "Part" msgstr "Pièce" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Catégorie" @@ -605,7 +590,7 @@ msgstr "Catégorie" msgid "Ancestor Build" msgstr "Version Précédente" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Attribué à moi" @@ -653,11 +638,11 @@ msgstr "Terminé avant" msgid "Completed after" msgstr "Terminé après" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Date min" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Date maximale" @@ -669,16 +654,16 @@ msgstr "Exclure l'arbre" 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:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Consommable" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Facultatif" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Assemblage" @@ -687,32 +672,32 @@ msgstr "Assemblage" msgid "Tracked" msgstr "Suivi" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testable" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Commande en cours" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Allouée" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Consommé" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "En Commande" @@ -720,7 +705,7 @@ msgstr "En Commande" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Ordre de Fabrication" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Emplacement" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Sortie" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Référence de l' Ordre de Fabrication" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "État de la construction" msgid "Build status code" msgstr "Code de statut de construction" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Code de lot" @@ -870,8 +855,8 @@ msgstr "Code de lot" msgid "Batch code for this build output" msgstr "Code de lot pour ce build output" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Date de création" @@ -891,7 +876,7 @@ msgstr "Date d'achèvement cible" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Date d'achèvement" @@ -907,8 +892,8 @@ msgstr "Émis par" msgid "User who issued this build order" msgstr "Utilisateur ayant émis cette commande de construction" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsable" @@ -917,12 +902,12 @@ msgstr "Responsable" msgid "User or group responsible for this build order" msgstr "Utilisateur ou groupe responsable de cet ordre de construction" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Lien Externe" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Lien vers une url externe" @@ -934,8 +919,8 @@ msgstr "Priorité de fabrication" msgid "Priority of this build order" msgstr "Priorité de cet ordre de fabrication" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Code du projet" @@ -968,7 +953,7 @@ msgstr "Une commande de construction a été effectuée" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Pas d'ordre de production défini" @@ -980,47 +965,47 @@ msgstr "L'ordre de production a déjà été réalisé" msgid "Build output does not match Build Order" msgstr "L'ordre de production de correspond pas à l'ordre de commande" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La quantité doit être supérieure à zéro" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 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:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 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:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "Les articles en stock alloués sont toujours en production" -#: build/models.py:1219 +#: build/models.py:1221 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:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Poste de l'ordre de construction" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Création de l'objet" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Création de l'objet" msgid "Quantity" msgstr "Quantité" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Quantité requise pour la commande de construction" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Quantité de stock consommé" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 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:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "La quantité doit être de 1 pour stock sérialisé" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "L'article de stock est suralloué" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Article en stock" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Stock d'origine de l'article" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Quantité de stock à allouer à la construction" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Installer dans" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Stock de destination de l'article" @@ -1099,7 +1084,7 @@ msgstr "Stock de destination de l'article" msgid "Build Level" msgstr "Niveau de construction" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Nom de l'article" @@ -1135,7 +1120,7 @@ msgstr "Quantité entière requise pour les pièces à suivre" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Numéros de série" @@ -1156,8 +1141,8 @@ msgstr "Allouer automatiquement les numéros de série" 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:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Les numéros de série suivants existent déjà, ou sont invalides" @@ -1245,7 +1230,7 @@ msgstr "Accepter les articles de stock qui n'ont pas été complètement alloué msgid "Required stock has not been fully allocated" msgstr "Le stock requis n'a pas encore été totalement alloué" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Accepter les incomplèts" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part doit pointer sur la même pièce que l'ordre de constructi msgid "Item must be in stock" msgstr "L'article doit être en stock" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantité disponible ({q}) dépassée" @@ -1306,7 +1291,7 @@ msgstr "La sortie de construction doit être spécifiée pour l'allocation des p 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Les articles d'allocation doivent être fournis" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Construire" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Pièce fournisseur" @@ -1404,7 +1389,7 @@ msgstr "Référence de construction" msgid "Part Category Name" msgstr "Nom de la catégorie de pièces" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Traçable" @@ -1412,29 +1397,29 @@ msgstr "Traçable" msgid "Inherited" msgstr "Reçu de quelqu'un" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Autoriser les variantes" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Article du BOM" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "En Production" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Planifié pour fabrication" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Stock externe" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Stock disponible" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "L'utilisateur n'a pas les permissions de supprimer cette pièce jointe" @@ -1554,610 +1543,634 @@ msgstr "Pas de plugin" msgid "Project Code Label" msgstr "Code du projet Étiquette" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Mise à jour" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Date de la dernière mise à jour" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Mis à jour par" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Utilisateur qui a mis à jour cet objet en dernier" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Code projet unique" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Description du projet" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Utilisateur ou groupe responsable de ce projet" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Paramétrés des touches" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Valeur du paramètre" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "La valeur choisie n'est pas une option valide" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "La valeur doit être une valeur booléenne" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "La valeur doit être un nombre entier" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Valeur doit être un nombre valide" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "La valeur ne passe pas les contrôles de validation" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "La chaîne de caractères constituant la clé doit être unique" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Utilisateur" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Quantité de rupture de prix" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Prix" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Prix unitaire à la quantité spécifiée" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Point final" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Point de terminaison auquel ce webhook est reçu" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Nom de ce webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Actif" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Ce webhook (lien de rappel HTTP) est-il actif" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Jeton" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Jeton d'accès" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Confidentiel" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Secret partagé pour HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID message" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Identifiant unique pour ce message" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Hôte" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Hôte à partir duquel ce message a été reçu" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Entête" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "En-tête de ce message" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Corps" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Corps de ce message" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Endpoint à partir duquel ce message a été reçu" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Travaillé sur" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Le travail sur ce message est-il terminé ?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Titre" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Lien" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Publié" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Auteur" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Résumé" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Lu" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Cette nouvelle a-t-elle été lue ?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Fichier image" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Type de modèle cible pour cette image" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "ID du modèle cible pour cette image" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Unité personnalisée" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Le symbole de l'unité doit être unique" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Le nom de l'unité doit être un identifiant valide" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Nom de l'unité" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Symbole" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Symbole d'unité facultatif" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Définition" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Définition de l'unité" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Pièce jointe" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Fichier manquant" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Lien externe manquant" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Type de modèle" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Type de modèle cible pour l'image" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Sélectionnez un fichier à joindre" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Commentaire" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Commentaire sur la pièce jointe" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Date de téléchargement" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Date de téléchargement du fichier" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Taille du fichier" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Taille du fichier en octets" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Type de modèle non valide spécifié pour la pièce jointe" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "État personnalisé" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "États membres de l'Union européenne" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Ensemble d'états de référence" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Ensemble d'états étendu à cet état personnalisé" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Clé logique" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Valeur" -#: common/models.py:2121 +#: common/models.py:2196 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:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Nom de l'Etat" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Étiquette" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Etiquette qui sera affichée dans le frontend" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Couleur" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Couleur qui sera affichée dans le frontend" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Modèle" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Modèle cet état est associé à" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Le modèle doit être sélectionné" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "La clé doit être sélectionnée" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "La clé logique doit être sélectionnée" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "La clé doit être différente de la clé logique" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Une classe de statut de référence valide doit être fournie" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 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:2206 +#: common/models.py:2281 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:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Liste de sélection" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Listes de sélection" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Nom de la liste de sélection" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Description de la liste de sélection" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Verrouillé" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Cette liste de sélection est-elle verrouillée ?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Cette liste de sélection peut-elle être utilisée ?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Plug-in source" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Plugin qui fournit la liste de sélection" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Chaîne source" -#: common/models.py:2287 +#: common/models.py:2362 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:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Entrée par défaut" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Entrée par défaut pour cette liste de sélection" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Créé le" -#: common/models.py:2303 +#: common/models.py:2378 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:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Dernière mise à jour" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Entrée de la liste de sélection" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Entrées de la liste de sélection" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Liste de sélection à laquelle appartient cette entrée" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Valeur de l'entrée de la liste de sélection" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Étiquette pour l'entrée de la liste de sélection" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Description de l'entrée de la liste de sélection" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Cette entrée de la liste de sélection est-elle active ?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Modèle de paramètre" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "Modèle de paramètre" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Les paramètres des cases à cocher ne peuvent pas avoir d'unités" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Les paramètres des cases à cocher ne peuvent pas comporter de choix" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Les choix doivent être uniques" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Le nom du modèle de paramètre doit être unique" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "Type de modèle cible pour ce modèle de paramètre" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Nom du paramètre" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Unités" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Unités physiques pour ce paramètre" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Description des paramètres" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Case à cocher" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Ce paramètre est-il une case à cocher ?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Choix" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Choix valables pour ce paramètre (séparés par des virgules)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Liste de sélection pour ce paramètre" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Activé" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "Ce modèle de paramètre est-il activé ?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "Paramètre" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "Paramètres" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Choix incorrect pour la valeur du paramètre" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Type de modèle non valide pour la pièce jointe" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "Identifiant du Modèle (ID)" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "ID du modèle cible pour ce paramètre" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Modèle" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "Modèle de paramètre" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Données" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Valeur du paramètre" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Valeur du paramètre" msgid "Note" msgstr "Note" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Champ de notes facultatif" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Analyse du code-barres" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Données du code-barres" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Utilisateur qui a scanné le code-barres" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Horodatage" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Date et heure du scan de code-barres" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "Point d'accès à l'URL qui a traité le code-barres" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Contexte" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Données contextuelles pour la lecture du code-barres" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Réponse" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Données de réponse provenant de la lecture du code-barres" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Résultat" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "La lecture du code-barres a-t-elle réussi ?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Une erreur s'est produite" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "Message email" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "Messages email" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Annoncé" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Envoyé" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Échec" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Livré" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Confirmé" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Entrant" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Sortant" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Sans réponse" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Suivi de livraison" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Suivi de la lecture" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Suivi du clic" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3096 +#: common/models.py:3171 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:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "ID du sujet de discussion" -#: common/models.py:3105 +#: common/models.py:3180 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:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Fil de discussion" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Fil lié à ce message" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "Priorité" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "Fil d'Email" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "Fils d'Emails" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Clé" -#: common/models.py:3183 +#: common/models.py:3258 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:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Identifiant unique pour ce fil" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Démarré en interne" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Est-ce que ce fil a été démarré en interne ?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Date et heure de création du fil" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Date et heure de dernière mise à jour du fil" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Articles reçus" @@ -2457,7 +2470,7 @@ msgstr "Nom du fichier" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Type de modèle" @@ -2601,13 +2614,13 @@ msgstr "Intervalle de mise à jour des devises" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "jours" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Plugin de mise à jour des devises à utiliser" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Télécharger depuis l'URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Limite du volume de téléchargement" - -#: common/setting/system.py:297 -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:303 -msgid "User-agent used to download from URL" -msgstr "Agent utilisateur utilisé pour télécharger depuis l'URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Validation stricte d'URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 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:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Intervalle de vérification des mises à jour" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Backup automatique" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Intervalle de sauvegarde automatique" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Spécifiez le nombre de jours entre les sauvegardes automatique" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Intervalle de suppression des tâches" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Intervalle de suppression du journal d'erreur" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Intervalle de suppression du journal de notification" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "Intervalle de suppression d'Email" -#: common/setting/system.py:363 +#: common/setting/system.py:343 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:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "Protéger le log d'Email" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "Empêcher la suppression des entrées du log d'email" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Support des code-barres" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Résultats des codes-barres des magasins" -#: common/setting/system.py:383 +#: common/setting/system.py:363 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:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Scanners de codes-barres Comptage maximal" -#: common/setting/system.py:389 +#: common/setting/system.py:369 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:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Délai d'entrée du code-barres" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Délai de traitement du code-barres" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Prise en charge de la webcam code-barres" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Code-barres Afficher les données" -#: common/setting/system.py:408 +#: common/setting/system.py:388 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:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Plugin de génération de codes-barres" -#: common/setting/system.py:414 +#: common/setting/system.py:394 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:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Modifications de la pièce" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Activer le champ de modification de la pièce" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Révision de l'assemblage uniquement" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "N'autoriser les révisions que pour les pièces d'assemblage" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Autoriser la suppression de l'Assemblée" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:438 +#: common/setting/system.py:418 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:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Autoriser les IPN dupliqués" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Permettre à plusieurs pièces de partager le même IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Autoriser l'édition de l'IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Copier les données de la pièce" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Copier les données des paramètres de la pièce" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Copier les données de test de la pièce" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Copier les templates de paramètres de catégorie" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Les pièces sont des templates par défaut" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Composant" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Achetable" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Les pièces sont achetables par défaut" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Vendable" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Les pièces sont vendables par défaut" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Les pièces sont traçables par défaut" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuelle" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Les pièces sont virtuelles par défaut" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Afficher les pièces connexes" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Afficher les pièces connexes à une pièce" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Stock initial" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Données initiales du fournisseur" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Format d'affichage du nom de la pièce" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Format pour afficher le nom de la pièce" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Icône de catégorie par défaut" -#: common/setting/system.py:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Nombre minimal de décimales" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Nombre maximal de décimales pour la tarification" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Utiliser le prix fournisseur" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Remplacer l'historique des achats" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Utiliser les prix des articles en stock" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Âge de tarification des articles de stock" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Utiliser les prix variants" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Inclure la tarification variante dans le calcul global des prix" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Variantes actives uniquement" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Mise à jour automatique des prix" -#: common/setting/system.py:627 +#: common/setting/system.py:607 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:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Intervalle de regénération des prix" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Prix internes" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Activer les prix internes pour les pièces" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Substitution du prix interne" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Activer l'impression d'étiquettes" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Activer l'impression d'étiquettes depuis l'interface Web" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Étiquette image DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Activer les rapports" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Activer la génération de rapports" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Mode Débogage" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Générer des rapports en mode debug (sortie HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Journal des erreurs" -#: common/setting/system.py:689 +#: common/setting/system.py:669 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:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Taille de la page" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Taille de page par défaut pour les rapports PDF" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Renforcer les unités des paramètres" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Numéro de Série Universellement Unique" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Supprimer le stock épuisé" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Modèle de code de lot" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Expiration du stock" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Activer la fonctionnalité d'expiration du stock" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Vendre le stock expiré" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Autoriser la vente de stock expiré" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Délai de péremption du stock" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Construction de stock expirée" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Autoriser la construction avec un stock expiré" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Contrôle de la propriété des stocks" -#: common/setting/system.py:753 +#: common/setting/system.py:745 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:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Icône par défaut de l'emplacement du stock" -#: common/setting/system.py:759 +#: common/setting/system.py:751 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:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Afficher les pièces en stock installées" -#: common/setting/system.py:765 +#: common/setting/system.py:757 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:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Vérifier la nomenclature lors de l'installation des articles" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Autoriser le transfert des produits en rupture de stock" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Modèle de référence de commande de construction" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Nécessite un Responsable propriétaire" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Un propriétaire responsable doit être assigné à chaque commande" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Exiger une partie active" -#: common/setting/system.py:799 +#: common/setting/system.py:791 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:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Requiert une pièce verrouillée" -#: common/setting/system.py:805 +#: common/setting/system.py:797 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:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Exiger une nomenclature valide" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Exiger des ordonnances fermées pour les enfants" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Ordres de fabrication externes" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Activer la fonctionnalité d'ordre de fabrication externe" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blocage jusqu'à la réussite des tests" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Les commandes marquées comme expédiées seront automatiquement complétées, en contournant le statut « expédié »" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Modèle de référence de commande d'achat" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Modifier les bons de commande terminés" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Convertir la monnaie" -#: common/setting/system.py:931 +#: common/setting/system.py:939 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:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Achat automatique des commandes" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Activer les mots de passe oubliés" -#: common/setting/system.py:946 +#: common/setting/system.py:954 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:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Activer les inscriptions" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Activer le SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Activer le SSO sur les pages de connexion" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Activer l'inscription SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Activer la synchronisation du groupe SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "Clé du groupe SSO" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "Carte de groupe SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Supprimer les groupes en dehors de SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email requis" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Exiger que l'utilisateur fournisse un mail lors de l'inscription" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Saisie automatique des utilisateurs SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Courriel en double" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Mot de passe deux fois" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Domaines autorisés" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Grouper sur inscription" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Forcer l'authentification multifacteurs" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Les utilisateurs doivent utiliser l'authentification multifacteurs." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 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:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Vérifier les plugins au démarrage" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Vérifier les mises à jour des plugins" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 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:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Activer l'intégration d'URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Autoriser les plugins à ajouter des chemins URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Activer l'intégration de navigation" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Activer les plugins à s'intégrer dans la navigation" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Activer l'intégration de plugins" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Activer l'intégration de plugin pour ajouter des apps" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Activer l'intégration du planning" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Autoriser les plugins à éxécuter des tâches planifiées" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Activer l'intégration des évènements" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Autoriser les plugins à répondre aux évènements internes" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Permettre l'intégration de l'interface" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 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:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "Activer l'intégration mail" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Autoriser les plugins à traiter les mails entrants/sortants" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Activer les codes de projet" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Activer les codes de projet pour le suivi des projets" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 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:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Exclure les localisations externes" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Période de l'inventaire automatique" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Afficher les noms des utilisateurs" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 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:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Afficher les profils d'utilisateur" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Afficher les profils des utilisateurs sur leur page de profil" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Activer les données de station de test" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 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:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "Dernières machines d'impression utilisées" msgid "Save the last used printing machines for a user" msgstr "Sauvegarder les dernières machines d'impression utilisées par un utilisateur" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "Tous les modèles" @@ -4012,8 +4077,8 @@ msgstr "La pièce interne est active" msgid "Supplier is Active" msgstr "Le fournisseur est actif" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Fabricant" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Adresse e-mail de contact" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Contact" @@ -4111,7 +4176,7 @@ msgstr "N° de TVA" msgid "Company Tax ID" msgstr "Numéro d'identification fiscale de l'entreprise" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adresse" @@ -4203,12 +4268,12 @@ msgstr "Notes internes pour la livraison" msgid "Link to address information (external)" msgstr "Lien vers les informations de l'adresse (externe)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Pièces du fabricant" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Pièce de base" @@ -4221,8 +4286,8 @@ msgstr "Sélectionner une partie" msgid "Select manufacturer" msgstr "Sélectionner un fabricant" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "Référence fabricant" @@ -4250,8 +4315,8 @@ msgstr "Les unités d'emballage doivent être supérieures à zéro" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Fournisseur" msgid "Select supplier" msgstr "Sélectionner un fournisseur" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Unité de gestion des stocks des fournisseurs" @@ -4290,15 +4355,15 @@ msgstr "Lien de la pièce du fournisseur externe" msgid "Supplier part description" msgstr "Description de la pièce du fournisseur" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "coût de base" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Frais minimums (par exemple frais de stock)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Conditionnement" @@ -4315,7 +4380,7 @@ msgstr "Nombre de paquet" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "plusieurs" @@ -4339,23 +4404,23 @@ msgstr "Date de dernière mise à jour des données de disponibilité" msgid "Supplier Price Break" msgstr "Rupture de prix pour le fournisseur" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Devise par défaut utilisée pour ce fournisseur" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Nom de l'entreprise" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "En Stock" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "Ruptures de prix" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Données de la ligne d'origine" msgid "Errors" msgstr "Erreurs" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Valide" @@ -4623,7 +4688,7 @@ msgstr "Nombre de copies à imprimer pour chaque étiquette" msgid "Connected" msgstr "Connecté" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Inconnu" @@ -4727,7 +4792,7 @@ msgstr "Clé de la propriété" msgid "Value of the property" msgstr "Valeur de la propriété" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Groupe" @@ -4751,117 +4816,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:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Référence de commande" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Remarquable" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "A le code du projet" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Créé par" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Créé avant" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Créé après" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "A la date de début" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Date de début Avant" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Date de début Après" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "A une date cible" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Date cible Avant" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Date cible Après" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Possède un Tarif" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Terminé avant" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Terminé après" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Ordre de fabrication externe" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Commande" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Commande Complétée" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Pièces Internes" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Commande En Attente" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Terminé" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Fait l'objet d'une expédition" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Commande d’achat" msgid "Sales Order" msgstr "Commandes" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Prix Total" msgid "Total price for this order" msgstr "Prix total pour cette commande" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Devise de la commande" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "L'adresse ne correspond pas à la société sélectionnée" msgid "Order description (optional)" msgstr "Description de la commande (facultatif)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Sélectionner le code du projet pour cette commande" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Lien vers une page externe" @@ -4930,7 +4995,7 @@ msgstr "Date de début" msgid "Scheduled start date for this order" msgstr "Date de début prévue pour cette commande" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Date Cible" @@ -4963,12 +5028,12 @@ msgstr "Point de contact pour cette commande" msgid "Company address for this order" msgstr "Adresse de l'entreprise pour cette commande" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Référence de la commande" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "État" @@ -4992,15 +5057,15 @@ msgstr "Code de référence de la commande fournisseur" msgid "received by" msgstr "reçu par" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Date à laquelle la commande a été complété" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Destination" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Destination des articles reçus" @@ -5024,616 +5089,624 @@ msgstr "La quantité doit être un nombre positif" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Client" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Société à laquelle les articles sont vendus" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Statut de la commande client" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Référence client " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Code de référence de la commande du client" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Nom de l’expédition" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "expédié par" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "La commande est déjà terminée" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "La commande est déjà annulée" -#: order/models.py:1459 +#: order/models.py:1463 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:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "La commande est verrouillée et ne peut être modifiée" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Nombre d'élement" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Référence du poste" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Notes sur les postes" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Description du poste (facultatif)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Contexte supplémentaire pour cette ligne" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Prix unitaire" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Poste du bon de commande" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "La pièce du fournisseur doit correspondre à celle du fournisseur" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "L'ordre de fabrication doit être marqué externe" -#: order/models.py:1951 +#: order/models.py:1971 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:1957 +#: order/models.py:1977 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:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Pièce fournisseur" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Reçu" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Nombre d'éléments reçus" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Prix d'achat" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Prix d'achat unitaire" -#: order/models.py:2025 +#: order/models.py:2056 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:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Ligne supplémentaire du bon de commande" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Poste de commande client" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Prix de vente" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Prix de vente unitaire" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Expédié" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Quantité expédiée" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Envoi de la commande client" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "L'adresse d'expédition doit correspondre au client" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "Adresse de livraison pour cet envoi" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Date d'expédition" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Date de Livraison" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Date de livraison de l'envoi" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Vérifié par" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Utilisateur qui a vérifié cet envoi" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envoi" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Numéro d'expédition" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "N° de suivi" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Information de suivi des colis" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "N° de facture" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Numéro de référence de la facture associée" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Le colis a déjà été envoyé" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "L'expédition n'a pas d'articles en stock alloués" -#: order/models.py:2446 +#: order/models.py:2477 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:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Ligne supplémentaire de commande client" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Affectation des commandes clients" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "L'article de stock n'a pas été assigné" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Impossible d'allouer le stock à une ligne sans pièce" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantité d'allocation ne peut pas excéder la quantité en stock" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "La quantité allouée doit être supérieure à zéro" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 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:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "La commande client ne correspond pas à l'expédition" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 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:2614 +#: order/models.py:2645 msgid "Line" msgstr "Ligne" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Référence de l'expédition de la commande client" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Article" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Sélectionner l'article de stock à affecter" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Saisir la quantité d'allocation de stock" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Retour Référence de la commande" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Entreprise à l'origine du retour des articles" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Statut du retour de commande" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Poste de l'ordre de retour" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "L'article en stock doit être spécifié" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "La quantité retournée dépasse la quantité en stock" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "La quantité retournée doit être supérieure à zéro" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Quantité non valide pour un article de stock sérialisé" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Sélectionner l'article à retourner par le client" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Date de réception" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "La date de réception de cet article en retour" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Résultats" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Résultat pour ce poste" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Ordre de retour Ligne supplémentaire" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "ID de commande" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID de l'ordre à dupliquer" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Copier des lignes" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Copier les postes de l'ordre original" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Copier les lignes supplémentaires" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Copier les postes supplémentaires de l'ordre original" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Copier les paramètres" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Lignes achevées" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Duplicata de commande" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Spécifier les options de duplication de cette commande" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "ID de commande invalide" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Nom du fournisseur" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "La commande ne peut pas être annulée" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 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:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "La commande comporte des postes incomplets" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "La commande n'est pas ouverte" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Tarification automobile" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Devise du prix d'achat" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Fusionner des éléments" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Unité de gestion des stocks" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Numéro de pièce interne" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Nom de la pièce interne" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "La pièce du fournisseur doit être spécifiée" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Le bon de commande doit être spécifié" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Le fournisseur doit correspondre au bon de commande" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Le bon de commande doit correspondre au fournisseur" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Poste" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Sélectionner le lieu de destination des envois reçus" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Saisir le code de lot pour les articles de stock entrant" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Date d'expiration" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "Saisir la date d'expiration des articles de stock entrant" -#: order/serializers.py:878 +#: order/serializers.py:879 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:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Remplacer les informations d'emballage pour les articles en stock entrants" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Note supplémentaire pour les articles en stock entrant" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Code-barres" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Code-barres scanné" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Le code-barres est déjà utilisé" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Les postes doivent être fournis" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "L'emplacement de la destination doit être spécifié" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Les valeurs de code-barres fournies doivent être uniques" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Envois" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Envois terminés" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "Lignes allouées" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Devise du prix de vente" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Postes alloués" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Aucun détail sur l'expédition n'est fourni" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Le poste n'est pas associé à cette commande" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "La quantité doit être positive" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Entrez les numéros de série à allouer" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "L'envoi a déjà été effectué" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "L'envoi n'est pas associé à cette commande" -#: order/serializers.py:1868 +#: order/serializers.py:1886 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:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Les numéros de série suivants sont indisponibles" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Poste de commande de retour" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Le poste ne correspond pas à l'ordre de retour" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Le poste a déjà été reçu" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Quantité à retourner" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Devise du prix de la ligne" @@ -5756,59 +5829,63 @@ msgstr "Est la révision" msgid "Has Revisions" msgstr "A des révisions" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "Nomenclature valide" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "Catégories en cascade" -#: part/api.py:963 +#: part/api.py:980 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:969 +#: part/api.py:986 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:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "La pièce d'assemblage est active" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "La pièce d'assemblage est traçable" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "La pièce d'assemblage est testable" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Le composant est testable" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Utilise" @@ -5821,7 +5898,7 @@ msgstr "Catégorie de composant" msgid "Part Categories" msgstr "Catégories de composants" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Emplacement par défaut" @@ -5849,7 +5926,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:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icône (facultatif)" @@ -5870,984 +5947,1012 @@ msgstr "Valeur par Défaut" msgid "Default Parameter Value" msgstr "Valeur par défaut du paramètre" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Pièces" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Impossible de supprimer cette partie car elle est verrouillée" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Impossible de supprimer cette partie car elle est toujours active" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Impossible de supprimer cette pièce car elle est utilisée dans un assemblage" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "La partie \"{self}\" ne peut pas être utilisée dans la nomenclature de \"{parent}\" (récursif)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "La partie \"{parent}\" est utilisée dans la nomenclature de \"{self}\" (récursif)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "L'IPN doit correspondre au modèle de regex {pattern}" -#: part/models.py:776 +#: part/models.py:777 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 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 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:798 +#: part/models.py:799 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:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "La partie parentale doit pointer vers le même modèle" -#: part/models.py:901 +#: part/models.py:902 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:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dupliqué non autorisé dans les paramètres de la pièce" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "La révision de la pièce existe déjà en double." -#: part/models.py:1054 +#: part/models.py:1055 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:1069 +#: part/models.py:1070 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:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Nom de l'article" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Est un modèle" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Cette pièce est-elle une pièce modèle ?" -#: part/models.py:1117 +#: part/models.py:1118 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:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Description de la pièce (facultatif)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Mots-clés" -#: part/models.py:1133 +#: part/models.py:1134 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:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Catégorie de la pièce" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Numéro de révision ou de version de la pièce" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Révision" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Cette partie est-elle une révision d'une autre partie ?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Révision de" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Où cet article est-il normalement stocké ?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Expiration par défaut" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Stock Minimum" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Niveau de stock minimum autorisé" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Unités de mesure pour cette partie" -#: part/models.py:1248 +#: part/models.py:1258 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:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 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:1266 +#: part/models.py:1276 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:1272 +#: part/models.py:1282 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:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Cette pièce peut-elle être vendue aux clients ?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Est-ce que cette pièce est active ?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Les parties verrouillées ne peuvent pas être modifiées" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "Nomenclature validée" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "Est-ce que la nomenclature pour cette pièce est correcte ?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Somme de contrôle de la nomenclature" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Somme de contrôle de la nomenclature enregistrée" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Nomenclature vérifiée par" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Date de vérification de la nomenclature" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Création Utilisateur" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Propriétaire responsable de cette pièce" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Ventes multiples" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Devise utilisée pour cacher les calculs de prix" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Coût minimum de la nomenclature" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Coût minimal des composants" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Coût maximal de la nomenclature" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Coût maximal des composants" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Coût d'achat minimum" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Coût d'achat historique minimum" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Coût d'achat maximum" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Coût d'achat historique maximum" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Prix interne minimum" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Coût minimum basé sur des ruptures de prix internes" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Prix interne maximum" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Coût maximum basé sur les écarts de prix internes" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Prix minimum du fournisseur" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Prix minimum des pièces provenant de fournisseurs externes" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Prix maximum du fournisseur" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Prix maximum des pièces provenant de fournisseurs externes" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Coût minimum de la variante" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Calcul du coût minimum des pièces de la variante" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Coût maximal de la variante" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Calcul du coût maximal des pièces de la variante" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Coût minimal" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Remplacer le coût minimum" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Coût maximal" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Dépassement du coût maximal" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Calcul du coût minimum global" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Calcul du coût maximum global" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Prix de vente minimum" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Prix de vente minimum basé sur des ruptures de prix" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Prix de vente maximum" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Prix de vente maximum en fonction des écarts de prix" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Coût minimum de vente" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Prix de vente historique minimum" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Coût de vente maximum" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Prix de vente historique maximum" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Partie pour l'inventaire" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Nombre d'articles" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Nombre d'entrées individuelles au moment de l'inventaire" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Stock total disponible au moment de l'inventaire" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Date" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Date de l'inventaire" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Coût minimum du stock" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Coût minimum estimé des stocks disponibles" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Coût maximal du stock" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Coût maximum estimé des stocks disponibles" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Vente de pièces détachées Prix cassé" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Modèle de test partiel" -#: part/models.py:3655 +#: part/models.py:3665 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:3687 +#: part/models.py:3697 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:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Nom de test" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Entrez un nom pour le test" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Clé de test" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Clé simplifiée pour le test" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Description du test" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Saisir la description de ce test" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Ce test est-il activé ?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Requis" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Ce test est-il obligatoire pour passer l'examen ?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Valeur requise" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Nécessite une pièce jointe" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Choix valables pour ce test (séparés par des virgules)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 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:3968 +#: part/models.py:4030 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:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Sélectionner la partie parentale" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Sous-partie" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Sélectionner la pièce à utiliser dans la nomenclature" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Quantité de nomenclature pour ce poste de nomenclature" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Ce poste de nomenclature est facultatif" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "Définir la quantité" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "Attrition" -#: part/models.py:4031 +#: part/models.py:4101 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:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "Arrondi au multiple" -#: part/models.py:4044 +#: part/models.py:4114 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:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Référence du poste de nomenclature" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Notes sur les postes de nomenclature" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Somme de contrôle" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Somme de contrôle de la ligne de nomenclature" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Validée" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Ce poste de nomenclature a été validé" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Obtient l'héritage" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 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:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "La sous-partie doit être spécifiée" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Remplacement d'un poste de nomenclature" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Poste de nomenclature parent" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Pièce de rechange" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Première partie" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Partie 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Sélectionner une partie connexe" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Note pour cette relation" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Une relation en double existe déjà" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Catégorie de parents" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Catégorie de pièce mère" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Sous-catégories" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Résultats" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Nombre de résultats enregistrés par rapport à ce modèle" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Devise d'achat de l'item" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "Le fichier n'est pas une image" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Partie originale" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Sélectionner la partie originale à dupliquer" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Copier l'image" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Copier l'image à partir de la partie originale" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Copier la nomenclature" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Copie de la nomenclature de la pièce originale" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Copie des données de paramètres de la pièce d'origine" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Notes sur la copie" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Copier les notes de la partie originale" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Test Copie" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Quantité de stock initial" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Emplacement initial du stock" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Spécifier l'emplacement du stock initial pour cette pièce" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Sélectionner le fournisseur (ou laisser en blanc pour passer)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Sélectionner le fabricant (ou laisser en blanc pour ignorer)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Numéro de pièce du fabricant" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "L'entreprise sélectionnée n'est pas un fournisseur valide" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "L'entreprise sélectionnée n'est pas un fabricant valide" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "La pièce du fabricant correspondant à ce MPN existe déjà" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "La pièce du fournisseur correspondant à cette UGS existe déjà" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Nom catégorie" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Construction" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "Quantité de cette pièce actuellement en production" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Quantité exceptionnelle de cette pièce sont planifié à la fabrication" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Éléments en stock" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Révisions" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Stock total" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Stock non attribué" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Variante Stock" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Dupliquer une pièce" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Copier les données initiales d'une autre partie" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Stock initial" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Créer une pièce avec une quantité de stock initiale" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Informations sur le fournisseur" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Ajouter les informations initiales du fournisseur pour cette pièce" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Copier les paramètres de la catégorie" -#: part/serializers.py:993 +#: part/serializers.py:994 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:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Image existante" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Nom de fichier d'une image de pièce existante" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Le fichier image n'existe pas" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Valider l'ensemble de la nomenclature" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Peut construire" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "Nécessaire pour fabrication" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "Alloué à la fabrication" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "Nécessaire pour les commandes" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "Alloué aux commandes" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Prix Minimum" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Remplacer la valeur calculée pour le prix minimum" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Prix minimum monnaie" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Prix Maximum" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Remplacer la valeur calculée pour le prix maximum" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Devise du prix maximum" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Mise à jour" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Mise à jour des prix pour cette pièce" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 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:1563 +#: part/serializers.py:1552 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:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Sélectionner l'assemblage parent" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Sélectionner le composant" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Sélectionner la pièce à partir de laquelle copier la nomenclature" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Supprimer les données existantes" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Supprimer les postes de nomenclature existants avant de les copier" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Inclure l'héritage" -#: part/serializers.py:2006 +#: part/serializers.py:2004 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:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Sauter les lignes non valides" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Activez cette option pour ignorer les lignes non valides" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Copier les pièces de remplacement" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copie de pièces de rechange en cas de duplication de postes de nomenclature" @@ -7099,15 +7204,15 @@ msgstr "Quantité à allouer" msgid "Label printing failed" msgstr "Échec de l'impression de l'étiquette" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Erreur de rendu de l'étiquette au format PDF" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Erreur de rendu de l'étiquette en HTML" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Aucun élément fourni pour l'impression" @@ -7168,7 +7273,7 @@ msgstr "Prise en charge native des codes-barres" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "Notification de changement de pièce" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "La partie `{part.name}` a été déclenchée par un événement `{part_action}`" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "Imprimante d'étiquettes PDF InvenTree" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Prise en charge native de l'impression d'étiquettes au format PDF" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Mode débogage" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Activer le mode débogage - renvoie du HTML brut au lieu du PDF" @@ -7568,7 +7673,7 @@ msgstr "Frontière" msgid "Print a border around each label" msgstr "Imprimer une bordure autour de chaque étiquette" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Paysage" @@ -8029,7 +8134,7 @@ msgstr "Le plugin ne prend pas en charge l'impression d'étiquettes" msgid "Invalid label dimensions" msgstr "Dimensions de l'étiquette non valides" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Aucun élément valide n'a été fourni au modèle" @@ -8073,112 +8178,112 @@ msgstr "Joindre au modèle sur l'impression" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Enregistrer le rapport en tant que pièce jointe à l'instance de modèle liée lors de l'impression" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Modèle de nom de fichier" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Modèle de génération de noms de fichiers" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Le modèle est activé" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "Type de modèle cible pour le modèle" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtres" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Filtres de requête de modèle (liste de paires clé/valeur séparées par des virgules)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Fichier modèle" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Taille des pages pour les rapports PDF" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Rendre le rapport en orientation paysage" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "Fusionner" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Rapport généré à partir du modèle {self.name}" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "Erreur dans la génération du rapport" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Largeur [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Largeur de l'étiquette, spécifiée en mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Hauteur [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Hauteur de l'étiquette, spécifiée en mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "Erreur d'impression des étiquettes" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Extrait " -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Fichier d'extrait de rapport" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Description du fichier d'extrait" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Elément" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Rapport sur le fichier d'actifs" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Description du fichier d'actifs" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numéro de série" @@ -8538,7 +8643,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Emplacement du stock" @@ -8546,11 +8651,11 @@ msgstr "Emplacement du stock" msgid "Stock Locations" msgstr "Emplacement des stocks" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Propriétaire" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Sélectionner un propriétaire" @@ -8558,7 +8663,7 @@ msgstr "Sélectionner un propriétaire" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Les articles en stock ne peuvent pas être directement placés dans un emplacement de stock structurel, mais peuvent être placés dans des emplacements subordonnés." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Externe" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "La pièce doit être spécifiée" -#: stock/models.py:911 +#: stock/models.py:924 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:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 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:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "L'objet ne peut pas s'appartenir à lui-même" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 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:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Poste de stock parent" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Pièce de base" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Où se trouve cet article en stock ?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "L'emballage de cet article en stock est stocké dans" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Installé dans" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "L'article a été installé dans un autre article ?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Numéro de série pour cet article" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Code de lot pour cet article de stock" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Quantité en stock" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Source Construire" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Construire pour cet article en stock" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Consommé par" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Ordre de construction qui a consommé cet article de stock" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Bon de commande source" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Commande d'achat pour cet article en stock" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Destination de la commande client" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Supprimer lors de l'épuisement" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Supprimer ce poste de stock lorsque le stock est épuisé" -#: stock/models.py:1209 +#: stock/models.py:1233 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:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Converti en partie" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 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:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "La quantité doit être un nombre entier" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 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:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "La quantité ne correspond pas au nombre de numéros de série" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Le modèle de test n'existe pas" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Un article de stock a été affecté à une commande client" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "L'article de stock est installé dans un autre article" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "L'article de stock contient d'autres articles" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Un article de stock a été affecté à un client" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "L'article de stock est actuellement en production" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Le stock sérialisé ne peut pas être fusionné" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Articles de stock en double" -#: stock/models.py:2098 +#: stock/models.py:2122 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:2106 +#: stock/models.py:2130 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:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Les codes d'état des stocks doivent correspondre" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "Suivi des articles en stock" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Notes d'entrée" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "Résultat du test de l'article en stock" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Une valeur doit être fournie pour ce test" -#: stock/models.py:3030 +#: stock/models.py:3054 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:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "Valeur non valide pour ce test" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Résultat du test" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Valeur de sortie du test" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Pièce jointe au résultat du test" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Notes de test" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Station de test" -#: stock/models.py:3087 +#: stock/models.py:3111 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:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Commencé" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "Horodatage du début du test" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Fini" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "Horodatage de la fin du test" @@ -8929,7 +9042,7 @@ msgstr "Entrez les numéros de série pour les nouveaux articles" msgid "Supplier Part Number" msgstr "Référence du fournisseur" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Expiré" @@ -9466,131 +9579,131 @@ msgstr "Dernière utilisation du jeton" msgid "Revoked" msgstr "Révoquée" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Droit défini" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Vue" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Droit de voir des éléments" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Ajouter" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Droit d'ajouter des éléments" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Modifier" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Droit de modifier des élément" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Supprimer" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Droit de supprimer des éléments" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "Bot" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Interne" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Invité" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Langue" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Langue préférée de l'utilisateur" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Thème" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Paramètres pour l'interface web sous forme de JSON - ne pas modifier manuellement !" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Raccourcis" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "Paramètres des widgets du tableau de bord sous forme de JSON - ne pas modifier manuellement !" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Nom d'affichage" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Nom d'affichage choisi pour l'utilisateur" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Localisation" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "Intitulé de l'emploi principal ou du poste" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Message sur le statut de l'utilisateur" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "Informations sur la localisation de l'utilisateur" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "L'utilisateur utilise activement le système" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "Coordonnées préférées de l'utilisateur" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Type d'utilisateur" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "De quel type d'utilisateur s'agit-il ?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Organisation" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "Organisation/affiliation principale de l'utilisateur" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Groupe primaire" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "Groupe principal de l'utilisateur" diff --git a/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/he/LC_MESSAGES/django.po index 054ba2a24f..00965ce03b 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Hebrew\n" "Language: he_IL\n" @@ -89,6 +89,7 @@ msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "" @@ -104,11 +105,11 @@ msgstr "הזן תאריך סיום" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "אימייל" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "הפניה חייבת להתאים לדפוס הנדרש" msgid "Reference number is too large" msgstr "מספר האסמכתה גדול מדי" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "בחירה שגויה" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "שם" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "תיאור" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "תיאור (לא חובה)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "נתיב" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "שמות כפולים אינם יכולים להתקיים תחת אותו אב" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "הערות סימון (אופציונלי)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "נתוני ברקוד" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "נתוני ברקוד של צד שלישי" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "ברקוד Hash" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Hash ייחודי של נתוני ברקוד" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "נמצא ברקוד קיים" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "שגיאת שרת" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "נרשמה שגיאה על ידי השרת." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "המספר חייב להיות תקין" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "מטבע" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "בחר מטבע מהאפשרויות הזמינות" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "קוד מטבע לא מאושר" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "מקור הבנייה" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "רכיב" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "קישור חיצוני" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "כמות" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "מספרים סידוריים" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "משתמש" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "קישור" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "קובץ מצורף" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "קובץ חסר" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "חסר קישור חיצוני" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "בחר קובץ לצירוף" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "הערה" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "שם קובץ" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "נשלח" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hi/LC_MESSAGES/django.po index 0f02dcb7e4..d218890f60 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Hindi\n" "Language: hi_IN\n" @@ -89,6 +89,7 @@ msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "" @@ -104,11 +105,11 @@ msgstr "तारीख दर्ज करें" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "कनेक्शन त्रुटि" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "ई-मेल" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 -msgid "Model type" -msgstr "" - -#: common/models.py:1997 -msgid "Target model type for image" -msgstr "" - -#: common/models.py:2005 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:2021 -msgid "Comment" +#: common/models.py:2019 +msgid "No file attached to rename" msgstr "" #: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 +msgid "Model type" +msgstr "" + +#: common/models.py:2072 +msgid "Target model type for image" +msgstr "" + +#: common/models.py:2080 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:2096 +msgid "Comment" +msgstr "" + +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/hu/LC_MESSAGES/django.po index f9062fc13f..9eadd76556 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Hungarian\n" "Language: hu_HU\n" @@ -89,6 +89,7 @@ msgstr "{original} átváltása {unit}-ra sikertelen" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Nem megfelelő mennyiség" @@ -104,11 +105,11 @@ 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:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Csatlakozási hiba" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "A kiszolgáló érvénytelen státuszkóddal válaszolt" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Kivétel történt" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "A kiszolgáló érvénytelen Content-Length értéket adott" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "A kép mérete túl nagy" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "A kép letöltés meghaladja a maximális méretet" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "A kiszolgáló üres választ adott" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "A megadott URL nem egy érvényes kép fájl" @@ -219,7 +220,7 @@ msgstr "Bejelentkezés az appba" msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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." @@ -263,124 +264,108 @@ msgstr "Az azonosítónak egyeznie kell a mintával" msgid "Reference number is too large" msgstr "Azonosító szám túl nagy" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Érvénytelen választás" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Név" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Leírás" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Leírás (opcionális)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Elérési út" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikált nevek nem lehetnek ugyanazon szülő alatt" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown megjegyzések (opcionális)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Vonalkód adat" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Harmadik féltől származó vonalkód adat" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Vonalkód hash" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Egyedi vonalkód hash" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Létező vonalkód" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Kiszolgálóhiba" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "A kiszolgáló egy hibaüzenetet rögzített." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Érvényes számnak kell lennie" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Pénznem" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Válassz pénznemet a lehetőségek közül" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Ez a mező nem lehet null." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Érvénytelen érték" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Távoli kép" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "A távoli kép URL-je" - -#: InvenTree/serializers.py:818 -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:825 -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:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Érvénytelen tartalomtípus-formátum" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "Tartalomtípus nem található" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "A tartalomtípus nem egyezik a szükséges mixin osztállyal" @@ -552,8 +537,8 @@ msgstr "Érvénytelen fizikai mértékegység" msgid "Not a valid currency code" msgstr "Érvénytelen pénznem kód" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Rendelés állapota" @@ -561,21 +546,21 @@ msgstr "Rendelés állapota" msgid "Parent Build" msgstr "Szülő gyártás" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Változatokkal együtt" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Változatokkal együtt" msgid "Part" msgstr "Alkatrész" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategória" @@ -605,7 +590,7 @@ msgstr "Kategória" msgid "Ancestor Build" msgstr "Szülő Gyártás" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Hozzám rendelt" @@ -653,11 +638,11 @@ msgstr "Elkészült ez előtt" msgid "Completed after" msgstr "Elkészült ez után" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Ettől a dátumtól" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Eddig a dátumig" @@ -669,16 +654,16 @@ msgstr "Fa kihagyása" 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:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Fogyóeszköz" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opcionális" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Gyártmány" @@ -687,32 +672,32 @@ msgstr "Gyártmány" msgid "Tracked" msgstr "Követett" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Ellenőrizhető" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Befejezetlen rendelés" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Lefoglalva" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Felhasználva" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Rendelve" @@ -720,7 +705,7 @@ msgstr "Rendelve" msgid "Build not found" msgstr "Gyártás nem található" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Gyártási utasítás" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Hely" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Kimenet" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Gyártási utasítás azonosító" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Gyártási állapot" msgid "Build status code" msgstr "Gyártás státusz kód" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batch kód" @@ -870,8 +855,8 @@ msgstr "Batch kód" msgid "Batch code for this build output" msgstr "Batch kód a gyártás kimenetéhez" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Létrehozás dátuma" @@ -891,7 +876,7 @@ msgstr "Befejezés cél dátuma" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Befejezés dátuma" @@ -907,8 +892,8 @@ msgstr "Indította" 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:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Felelős" @@ -917,12 +902,12 @@ msgstr "Felelős" 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:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Külső link" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link külső URL-re" @@ -934,8 +919,8 @@ msgstr "Priorítás" msgid "Priority of this build order" msgstr "Gyártási utasítás priorítása" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Projektszám" @@ -968,7 +953,7 @@ msgstr "Gyártási utasítás elkészült" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nincs gyártási kimenet megadva" @@ -980,47 +965,47 @@ msgstr "Gyártási kimenet már kész" 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Mennyiségnek nullánál többnek kell lennie" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 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:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 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:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "A lefoglalt készletelemek még gyártás alatt vannak" -#: build/models.py:1219 +#: build/models.py:1221 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:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Gyártási Rendelés Sor Tétel" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Gyártás objektum" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Gyártás objektum" msgid "Quantity" msgstr "Mennyiség" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Gyártáshoz szükséges mennyiség" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Felhasznált készlet mennyisége" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "A készlet tétel nem egyezik az alkatrészjegyzékkel" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "A lefoglalt mennyiségnek nullánál nagyobbnak kell lennie" -#: build/models.py:1984 +#: build/models.py:1986 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:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Készlet túlfoglalva" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Készlet tétel" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Forrás készlet tétel" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Készlet mennyiség amit foglaljunk a gyártáshoz" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Beépítés ebbe" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Cél készlet tétel" @@ -1099,7 +1084,7 @@ msgstr "Cél készlet tétel" msgid "Build Level" msgstr "Gyártási Szint" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Alkatrész neve" @@ -1135,7 +1120,7 @@ msgstr "Egész számú mennyiség szükséges az egyedi követésre kötelezett 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Sorozatszámok" @@ -1156,8 +1141,8 @@ msgstr "Sorozatszámok automatikus hozzárendelése" 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:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "A következő sorozatszámok már léteznek vagy nem megfelelőek" @@ -1246,7 +1231,7 @@ msgstr "Fogadd el hogy a készlet tételek nincsenek teljesen lefoglalva ehhez a msgid "Required stock has not been fully allocated" msgstr "A szükséges készlet nem lett teljesen lefoglalva" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Befejezetlenek elfogadása" @@ -1294,7 +1279,7 @@ msgstr "bom_item.part ugyanarra az alkatrészre kell mutasson mint a gyártási msgid "Item must be in stock" msgstr "A tételnek kell legyen készlete" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Rendelkezésre álló mennyiség ({q}) túllépve" @@ -1307,7 +1292,7 @@ msgstr "Gyártási kimenetet meg kell adni a követésre kötelezett alkatrésze 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "A lefoglalandó tételeket meg kell adni" @@ -1387,9 +1372,9 @@ msgstr "Beépítés helye" msgid "Build" msgstr "Gyártás" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Beszállítói alkatrész" @@ -1405,7 +1390,7 @@ msgstr "Gyártási Hivatkozás" msgid "Part Category Name" msgstr "Alkatrész kategória Neve" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Követésre kötelezett" @@ -1413,29 +1398,29 @@ msgstr "Követésre kötelezett" msgid "Inherited" msgstr "Örökölt" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Változatok" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Alkatrészjegyzék tétel" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "Gyártásban" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Gyártás Ütemezve" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Külső raktárkészlet" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Elérhető készlet" @@ -1532,6 +1517,10 @@ 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:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "A felhasználó nem jogosult ezen melléklet törlésére" @@ -1555,610 +1544,634 @@ msgstr "Nincsen plugin" msgid "Project Code Label" msgstr "Projekt kód címke" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Frissítve" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Legutóbbi frissítés időpontja" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Frissítette" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Az objektumot utoljára módosította" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Egyedi projektszám" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Projekt leírása" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "A projektért felelős felhasználó vagy csoport" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Beállítási kulcs" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Beállítás értéke" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "A kiválasztott érték nem egy érvényes lehetőség" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Az érték bináris kell legyen" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Az érték egész szám kell legyen" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Az értéknek számnak kell lennie" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Az érték nem felel meg az ellenőrzéseknek" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Kulcs string egyedi kell legyen" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Felhasználó" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Ársáv mennyiség" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Ár" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Egységár egy meghatározott mennyiség esetén" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Végpont" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Végpont ahol ez a webhook érkezik" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Webhook neve" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktív" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Aktív-e ez a webhook" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token a hozzáféréshez" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Titok" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Megosztott titok a HMAC-hoz" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Üzenet azonosító" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Egyedi azonosító ehhez az üzenethez" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Kiszolgáló" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Kiszolgáló ahonnan ez az üzenet érkezett" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Fejléc" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Üzenet fejléce" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Törzs" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Üzenet törzse" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Végpont amin ez az üzenet érkezett" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Dolgozott rajta" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Befejeződött a munka ezzel az üzenettel?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Azonosító" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Cím" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Közzétéve" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Szerző" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Összefoglaló" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Elolvasva" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Elolvasva?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Képfájl" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "A képhez tartozó model típus" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "A képhez tartozó model azonosító" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Egyedi mértékegység" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "A mértékegység szimbólumának egyedinek kell lennie" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "A mértékegységnek valós azonosítónak kell lennie" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Egység neve" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Szimbólum" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Opcionális mértékegység szimbólum" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definíció" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Mértékegység definíció" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Melléklet" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Hiányzó fájl" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Hiányzó külső link" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Modell típusa" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Képhez tartozó model típus" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Válaszd ki a mellekelni kívánt fájlt" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Megjegyzés" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Melléklet megjegyzés" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Feltöltés dátuma" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "A fájl feltöltésének dátuma" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Fájl mérete" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Fájlméret bájtban" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "A melléklet model típusa érvénytelen" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Egyedi Állapot" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Egyedi Állapotok" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Hivatkozott Állapot Készlet" -#: common/models.py:2109 +#: common/models.py:2184 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:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logikai kulcs" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Érték" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "A model adatbázisba tárolandó szám" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Az állapot neve" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Címke" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "A felületen megjelenített címke" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Szín" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "A felöleten megjelenő szín" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Model" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "A Model amihez ez az állapot tartozik" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Modelt választani kötelező" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Kulcsot választani kötelező" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Logikai kulcsot választani kötelező" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "A kulcs és a logikai kulcs nem lehet azonos" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Helyes hivatkozási állapot osztályt kell megadni" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 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:2206 +#: common/models.py:2281 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:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Választéklista" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Választéklisták" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Választéklista neve" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Választéklista leírása" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Lezárt" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Választéklista lezárva?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Választéklista használható?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Forrás plugin" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Választéklista szolgáltató plugin" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Forrás szöveg" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "Elhagyható lista forrás azonosító szöveg" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Alapértelmezett bejegyzés" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Alapértelmezett elem ezen a listán" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Létrehozva" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "Választéklista létrehozási dátuma és ideje" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Utoljára módosítva" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Választéklista bejegyzés" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Választéklista bejegyzések" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Választéklista amihez ez a bejegyzés tartozik" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Választéklista bejegyzés értéke" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Választéklista bejegyzés felirata" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Választéklista bejegyzés leírása" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Választéklista bejegyzés aktív?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Paraméter sablon" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "Paraméter Sablonok" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Jelölőnégyzet paraméternek nem lehet mértékegysége" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Jelölőnégyzet paraméternek nem lehetnek választási lehetőségei" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "A lehetőségek egyediek kell legyenek" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "A paraméter sablon nevének egyedinek kell lennie" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "Célmodell típusa ehhez a paramétersablonhoz" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Paraméter neve" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Mértékegység" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Paraméter mértékegysége" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Paraméter leírása" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Jelölőnégyzet" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Ez a paraméter egy jelölőnégyzet?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Lehetőségek" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Választható lehetőségek (vesszővel elválasztva)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "A paraméter választéklistája" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Engedélyezve" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "Ez a paramétersablon engedélyezett?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "Paraméter" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "Paraméterek" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Hibás választás a paraméterre" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Érvénytelen modelltípus megadva a paraméterhez" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "Modell ID" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "A célmodell azonosítója ehhez a paraméterhez" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Sablon" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "Paraméter sablon" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Adat" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Paraméter értéke" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2168,181 +2181,181 @@ msgstr "Paraméter értéke" msgid "Note" msgstr "Megjegyzés" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Opcionális megjegyzés mező" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Vonalkód beolvasás" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Vonalkód adat" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Melyik felhasználó olvasta be a vonalkódot" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Időbélyeg" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Vonalkód beolvasás dátuma és ideje" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "Vonalkód feldolgozó URL végpont" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Kontextus" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Vonalkód olvasás kontextus adat" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Válasz" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Vonalkód olvasó válasz adat" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Eredmény" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "Vonalkód olvasás sikeres volt?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Hiba történt" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "E-mail üzenet" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "E-mail üzenetek" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Bejelentve" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Elküldve" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Megbukott" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Kiszállítva" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Megerősítve" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Bejövő" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Kimenő" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Nincs válasz" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Kiszállítás követése" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Olvasási visszaigazolás" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Kattintások nyomkövetése" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "Globális ID" -#: common/models.py:3096 +#: common/models.py:3171 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:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "Szál ID" -#: common/models.py:3105 +#: common/models.py:3180 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:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Szál" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Ehhez az üzenethez kapcsolódó üzenet-lánc" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "Prioritás" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "Email szál" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "Email szálak" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Kulcs" -#: common/models.py:3183 +#: common/models.py:3258 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:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Üzenetlánc egyedi azonosítója" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Belső kezdés" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Ez az üzenetlánc belül indult?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Az üzenetlánc kezdeti dátuma és ideje" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Az üzenetlánc utolsó módosításának dátuma és ideje" @@ -2364,7 +2377,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Készlet érkezett" @@ -2458,7 +2471,7 @@ msgstr "Fájlnév" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Modell típusa" @@ -2602,13 +2615,13 @@ msgstr "Árfolyam frissítési gyakoriság" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "nap" @@ -2621,637 +2634,637 @@ msgid "Currency update plugin to use" msgstr "Kiválasztott árfolyam frissítő plugin" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Letöltés URL-ről" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Letöltési méret korlát" - -#: common/setting/system.py:297 -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:303 -msgid "User-agent used to download from URL" -msgstr "Felhasznált User-agent az URL-ről letöltéshez" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Erős URL validáció" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Sablon specifikáció igénylése az URL validálásnál" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Frissítés keresés gyakorisága" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automatikus biztonsági mentés" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Automata biztonsági mentés gyakorisága" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Feladat törlési gyakoriság" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Hibanapló törlési gyakoriság" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Értesítés törlési gyakoriság" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "Email törlési gyakoriság" -#: common/setting/system.py:363 +#: common/setting/system.py:343 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:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "Email napló védett" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "Megakadályozza az email napló bejegyzések törlését" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Vonalkód támogatás" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Vonalkód olvasás eredmények tárolása" -#: common/setting/system.py:383 +#: common/setting/system.py:363 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:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Maximálisan tárolt vonalkód olvasások mennyisége" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "Maximálisan tárolt vonalkód olvasások száma" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Vonalkód beadási késleltetés" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Vonalkód beadáskor a feldolgozás késleltetési ideje" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Webkamerás vonalkód olvasás" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Vonalkód Adat Megjelenítése" -#: common/setting/system.py:408 +#: common/setting/system.py:388 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:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Vonalkód Generáló Plugin" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "Belső vonalkód generálásra használatos plugin" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Alkatrész változatok" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Alkatrész változat vagy verziószám tulajdonság használata" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Csak Összeállítás Verzió" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Csak összeállított alkatrészeknek lehessen verziója" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Lehessen törölni az Összeállításból" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN reguláris kifejezés" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguláris kifejezés ami illeszkedik az alkatrész IPN-re" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Többször is előforduló IPN engedélyezése" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Azonos IPN használható legyen több alkatrészre is" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "IPN szerkesztésének engedélyezése" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Alkatrészjegyzék adatok másolása" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Alkatrész paraméterek másolása" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Alkatrész teszt adatok másolása" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Kategória paraméter sablonok másolása" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Alkatrészek alapból sablon alkatrészek legyenek" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Összetevő" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Beszerezhető" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Alkatrészek alapból beszerezhetők legyenek" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Értékesíthető" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Alkatrészek alapból eladhatók legyenek" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Alkatrészek alapból követésre kötelezettek legyenek" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuális" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Alkatrészek alapból virtuálisak legyenek" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Kapcsolódó alkatrészek megjelenítése" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Alkatrész kapcsolódó alkatrészeinek megjelenítése" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Kezdeti készlet adatok" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Kezdeti beszállítói adatok" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Alkatrész név megjelenítés formátuma" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Formátum az alkatrész név megjelenítéséhez" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Alkatrész kategória alapértelmezett ikon" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "Alkatrész kategória alapértelmezett ikon (üres ha nincs)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek min. száma" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Áraknál használt tizedesjegyek max. száma" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Beszállítói árazás használata" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Beszerzési előzmények felülbírálása" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Készlet tétel ár használata" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Készlet tétel ár kora" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Alkatrészváltozat árak használata" -#: common/setting/system.py:612 +#: common/setting/system.py:592 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:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Csak az aktív változatokat" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Árazás automatikus frissítése" -#: common/setting/system.py:627 +#: common/setting/system.py:607 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:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Árazás újraszámítás gyakoriság" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "Árak automatikus frissítése ennyi nap után" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Belső árak" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Alkatrészekhez belső ár engedélyezése" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Belső ár felülbírálása" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "Nulla mennyiség engedélyezése az anyagjegyzékben" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Címke nyomtatás engedélyezése" -#: common/setting/system.py:663 +#: common/setting/system.py:643 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:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Címke kép DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Riportok engedélyezése" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Riportok előállításának engedélyezése" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Debug mód" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Riportok előállítása HTML formátumban (hibakereséshez)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Jelentési hibák naplózása" -#: common/setting/system.py:689 +#: common/setting/system.py:669 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:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Lapméret" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Alapértelmezett lapméret a PDF riportokhoz" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Csak választható mértékegységek" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Globálisan egyedi sorozatszámok" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Kimerült készlet törlése" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Batch kód sablon" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Készlet lejárata" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Készlet lejárat kezelésének engedélyezése" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Lejárt készlet értékesítése" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Lejárt készlet értékesítésének engedélyezése" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Álló készlet ideje" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Lejárt készlet gyártása" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Gyártás engedélyezése lejárt készletből" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Készlet tulajdonosok kezelése" -#: common/setting/system.py:753 +#: common/setting/system.py:745 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:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Hely alapértelmezett ikon" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Hely alapértelmezett ikon (üres ha nincs)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Beépített készlet megjelenítése" -#: common/setting/system.py:765 +#: common/setting/system.py:757 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:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Tételek telepítésekor a darabjegyzék ellenőrzése" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Lehet Hiányzó Készletet Mozgatni" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Gyártási utasítás azonosító minta" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Felelős tulajdonos szükséges" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Minden rendeléshez felelőst kell rendelni" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Szükséges Aktív Alkatrész" -#: common/setting/system.py:799 +#: common/setting/system.py:791 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:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Elvárás a Lezárt Alkatrész" -#: common/setting/system.py:805 +#: common/setting/system.py:797 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:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Jóváhagyott Alkatrészjegyzék Kötelező" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Leszármazott Gyártásoknak Lezártnak Kell Lennie" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Külső Gyártási Rendelések" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Engedélyezze a külső gyártási rendelés funkciót" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokkolás a tesztek sikeres végrehajtásáig" @@ -3325,326 +3338,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing 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:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Beszerzési rendelés azonosító minta" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Befejezett beszerzési rendelés szerkesztése" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Jelenlegi pénznem" -#: common/setting/system.py:931 +#: common/setting/system.py:939 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:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Beszerzési rendelések automatikus befejezése" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Elfelejtett jelszó engedélyezése" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Elfelejtett jelszó funkció engedélyezése a bejentkező oldalon" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Regisztráció engedélyezése" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "SSO engedélyezése" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "SSO engedélyezése a bejelentkező oldalon" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "SSO regisztráció engedélyezése" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "SSO csoport szinkronizálás engedélyezése" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSO csoport kulcs" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "SSO csoport hozzárendelés" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Az SSO-n kívüli csoportok eltávolítása" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email szükséges" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Kötelező email megadás regisztrációkor" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "SSO felhasználók automatikus kitöltése" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Email kétszer" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Jelszó kétszer" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Engedélyezett domainek" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Csoport regisztráláskor" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Többfaktoros hitelesítés kényszerítése" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "A felhasználóknak többfaktoros hitelesítést kell használniuk." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Pluginok ellenőrzése indításkor" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Plugin frissítések ellenőrzése" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 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:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "URL integráció engedélyezése" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 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:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Navigációs integráció engedélyezése" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 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:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "App integráció engedélyezése" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "App hozzáadásának engedélyezése a pluginok számára" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Ütemezés integráció engedélyezése" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 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:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Esemény integráció engedélyezése" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 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:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Interfész integráció engedélyezése" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 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:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "Email integráció engedélyezése" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 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:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Projektszámok engedélyezése" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Projectek nyomkövetéséhez projekt kódok engedélyezése" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 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:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Külső helyek nélkül" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Automatikus leltár időpontja" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "Készlettörténet törlési gyakoriság" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Felhasználók teljes nevének megjelenítése" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 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:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Felhasználói profilok megjelenítése" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Felhasználói profilok megjelenítése a profil oldalukon" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Teszt állomás adatok engedélyezése" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 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:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "Gép Ping Engedélyezése" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 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" @@ -3952,6 +4009,14 @@ msgstr "Utoljára használt nyomtató gépek" msgid "Save the last used printing machines for a user" msgstr "Az utoljára használt nyomtató tárolása a felhasználóhoz" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "Minden modell" @@ -4013,8 +4078,8 @@ msgstr "A saját alkatrész Aktív" msgid "Supplier is Active" msgstr "A Beszállító Aktív" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Gyártó" @@ -4060,7 +4125,7 @@ msgid "Contact email address" msgstr "Kapcsolattartó email címe" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Névjegy" @@ -4112,7 +4177,7 @@ msgstr "Adószám" msgid "Company Tax ID" msgstr "Céges adószám" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Cím" @@ -4204,12 +4269,12 @@ msgstr "Szállítási megjegyzések belső használatra" msgid "Link to address information (external)" msgstr "Link a címinformációkhoz (külső)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gyártói alkatrész" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Kiindulási alkatrész" @@ -4222,8 +4287,8 @@ msgstr "Válassz alkatrészt" msgid "Select manufacturer" msgstr "Gyártó kiválasztása" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN (Gyártói cikkszám)" @@ -4251,8 +4316,8 @@ msgstr "Csomagolási mennyiségnek nullánál többnek kell lennie" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4263,7 +4328,7 @@ msgstr "Beszállító" msgid "Select supplier" msgstr "Beszállító kiválasztása" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Beszállítói cikkszám" @@ -4291,15 +4356,15 @@ msgstr "URL link a beszállítói alkatrészhez" msgid "Supplier part description" msgstr "Beszállítói alkatrész leírása" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "alap költség" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimális díj (pl. tárolási díj)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Csomagolás" @@ -4316,7 +4381,7 @@ msgstr "Csomagolási mennyiség" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "többszörös" @@ -4340,23 +4405,23 @@ msgstr "Utolsó elérhetőségi adat frissítés" msgid "Supplier Price Break" msgstr "Beszállítói Ár Kedvezmény" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Beszállító által használt alapértelmezett pénznem" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Cégnév" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Készleten" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "Árkategóriák" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4512,7 +4577,7 @@ msgstr "Eredeti sor adat" msgid "Errors" msgstr "Hibák" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Érvényes" @@ -4624,7 +4689,7 @@ msgstr "Címkénkénti nyomtatandó mennyiség" msgid "Connected" msgstr "Csatlakoztatba" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Ismeretlen" @@ -4728,7 +4793,7 @@ msgstr "A tulajdonság kulcsa" msgid "Value of the property" msgstr "A tulajdonság értéke" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Csoport" @@ -4752,117 +4817,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:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Rendelés azonosítója" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Kintlévő" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Van projektszáma" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Készítette" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Ez előtt létrehozva" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Létrehozva ez után" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Van kezdeti dátum" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Kezdeti dátum ez előtt" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Kezdeti dátum ez után" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Van céldátum" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Céldátum ez előtt" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Céldátum ez után" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Van árazás" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Ez előtt befejezve" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Befejezve ez után" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Külső Gyártási Rendelés" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Rendelés" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "A rendelés teljesítve" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Belső alkatrész" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "A rendelés függőben" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Kész" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Van kiszállítás" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4870,8 +4935,8 @@ msgstr "Beszerzési rendelés" msgid "Sales Order" msgstr "Vevői rendelés" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4887,11 +4952,11 @@ msgstr "Teljes ár" msgid "Total price for this order" msgstr "A rendelés teljes ára" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Rendelés pénzneme" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4915,11 +4980,11 @@ msgstr "A cím nem egyezik a kiválasztott vállalattal" msgid "Order description (optional)" msgstr "Rendelés leírása (opcionális)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Válassz projektszámot ehhez a rendeléshez" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Link külső weboldalra" @@ -4931,7 +4996,7 @@ msgstr "Kezdés dátuma" msgid "Scheduled start date for this order" msgstr "A tervezett kezdeti dátum ehhez a gyártáshoz" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Cél dátum" @@ -4964,12 +5029,12 @@ msgstr "Kapcsolattartó ehhez a rendeléshez" msgid "Company address for this order" msgstr "Cég címei ehhez a rendeléshez" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Rendelés azonosító" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Állapot" @@ -4993,15 +5058,15 @@ msgstr "Beszállítói rendelés azonosító kód" msgid "received by" msgstr "érkeztette" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Rendelés teljesítési dátuma" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Cél" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Beérkezett tételek tárolója" @@ -5025,616 +5090,624 @@ msgstr "Mennyiség pozitív kell legyen" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Vevő" -#: order/models.py:1363 +#: order/models.py:1367 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:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Értékesítési rendelés állapot" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Vevői azonosító " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Megrendelés azonosító kódja a vevőnél" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Kiszállítás dátuma" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "szállította" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Rendelés már teljesítve" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Rendelés már visszavonva" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Csak nyitott rendelés jelölhető késznek" -#: order/models.py:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 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:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Tétel mennyiség" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Sortétel azonosító" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Sortétel megjegyzései" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Sortétel leírása (opcionális)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "További kontextus ehhez a sorhoz" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Egységár" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Vevői Rendelés Sortétel" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Beszállítói alkatrésznek egyeznie kell a beszállítóval" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "Gyártási rendelést külsőnek kell jelölni" -#: order/models.py:1951 +#: order/models.py:1971 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:1957 +#: order/models.py:1977 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:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Beszállítói alkatrész" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Beérkezett" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Érkezett tételek száma" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Beszerzési ár" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Beszerzési egységár" -#: order/models.py:2025 +#: order/models.py:2056 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:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Vevői Rendelés Extra Sor" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Vevői Rendelés Sortétel" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Eladási ár" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Eladási egységár" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Kiszállítva" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Szállított mennyiség" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Vevői Rendelés Szállítása" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "A szállítási címnek egyeznie kell az ügyféllel" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "Szállítási cím ehhez a szállítmányhoz" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Szállítás dátuma" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Szállítási dátum" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Kézbesítés dátuma" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Ellenőrizte" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Felhasználó aki ellenőrizte ezt a szállítmányt" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Szállítmány" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Szállítmány száma" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Nyomkövetési szám" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Szállítmány nyomkövetési információ" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Számlaszám" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Hozzátartozó számla referencia száma" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Szállítmány már elküldve" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Szállítmány nem tartalmaz foglalt készlet tételeket" -#: order/models.py:2446 +#: order/models.py:2477 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:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Vevői Rendelés Extra Sor" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Vevői rendeléshez foglalások" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Készlet tétel nincs hozzárendelve" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 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:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A lefoglalandó mennyiség nem haladhatja meg a készlet mennyiségét" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Lefoglalt mennyiségnek nullánál többnek kell lennie" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 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:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Vevői rendelés nem egyezik a szállítmánnyal" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 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:2614 +#: order/models.py:2645 msgid "Line" msgstr "Sor" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Vevői rendelés szállítmány azonosító" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Tétel" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Válaszd ki a foglalásra szánt készlet tételt" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Készlet foglalási mennyiség megadása" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Visszavétel azonosító" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Cég akitől a tételek visszavételre kerülnek" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Visszavétel állapota" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Visszavétel sortétel" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "Készlettételt meg kell adni" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "Visszavétel mennyisége meghaladja a készletet" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "Visszavétel mennyisége nullánál nagyobb kell, hogy legyen" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Érvénytelen mennyiség szerializált készlettételnél" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Válaszd ki a vevőtől visszavenni kívánt tételt" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Visszavétel dátuma" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Kimenetel" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Sortétel végső kimenetele" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Visszavétel extra tétel" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "Rendelés azonosító" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "A duplikálandó megrendelés száma" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Sorok másolása" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Sortételek másolása az eredeti rendelésről" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Extra sorok másolása" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Az eredeti rendelés extra tételeinek másolása" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Paraméterek másolása" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Kész sorok" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Rendelés duplikálása" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Rendelés másolás beállításai" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Érvénytelen rendelés ID" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Beszállító neve" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "A rendelést nem lehet törölni" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 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:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "A rendelésben teljesítetlen sortételek vannak" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "A rendelés nem nyitott" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Automata árazás" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Beszérzési ár pénzneme" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Elemek összevonása" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU (leltári azonosító)" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Belső cikkszám" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Belső cikkszám" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Beszállítói alkatrészt meg kell adni" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Beszerzési rendelést meg kell adni" -#: order/serializers.py:784 +#: order/serializers.py:785 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:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "A beszerzési rendelésnek egyeznie kell a beszállítóval" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Sortétel" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Válassz cél helyet a beérkezett tételeknek" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Írd be a batch kódját a beérkezett tételeknek" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Lejárati dátum" -#: order/serializers.py:870 +#: order/serializers.py:871 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:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Írd be a sorozatszámokat a beérkezett tételekhez" -#: order/serializers.py:888 +#: order/serializers.py:889 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:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Kiegészítő megjegyzés beérkező készlettételekhez" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Vonalkód" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Beolvasott vonalkód" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Ez a vonalkód már használva van" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Sortételt meg kell adni" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "A cél helyet kötelező megadni" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Megadott vonalkódoknak egyedieknek kel lenniük" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Szállítások" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Kész szállítmányok" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Eladási ár pénzneme" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Foglalt tételek" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Nincsenek szállítmány részletek megadva" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Sortétel nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Mennyiség pozitív kell legyen" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Írd be a sorozatszámokat a kiosztáshoz" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Szállítmány kiszállítva" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Szállítmány nincs hozzárendelve ehhez a rendeléshez" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Nincs találat a következő sorozatszámokra" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Az alábbi sorozatszámok nem elérhetők" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Visszavétel sortétel" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Sortétel nem egyezik a visszavétellel" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "A sortétel már beérkezett" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Visszaküldési mennyiség" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Sortétel pénzneme" @@ -5757,59 +5830,63 @@ msgstr "Változat" msgid "Has Revisions" msgstr "Vannak Változatok" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "Kaszkád Kategóriák" -#: part/api.py:963 +#: part/api.py:980 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:969 +#: part/api.py:986 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:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "Összeállított Alkatrész ellenőrizhető" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Összetevő alkatrész ellenőrizhető" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Használ" @@ -5822,7 +5899,7 @@ msgstr "Alkatrész kategória" msgid "Part Categories" msgstr "Alkatrész kategóriák" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Alapértelmezett hely" @@ -5850,7 +5927,7 @@ msgstr "Ebben a kategóriában évő alkatrészek kulcsszavai alapban" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (opcionális)" @@ -5871,984 +5948,1012 @@ msgstr "Alapértelmezett érték" msgid "Default Parameter Value" msgstr "Alapértelmezett paraméter érték" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Alkatrészek" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Nem lehet törölni egy zárolt alkatrész paramétereit" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Nem lehet módosítani egy zárolt alkatrész paramétereit" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Lezárt alkatrész nem törölhető" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Aktív alkatrész nem törölhető" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Összeállításban felhasznált alkatrész nem törölhető" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Az '{self}' alkatrész nem használható a '{parent}' alkatrészjegyzékében (mert rekurzív lenne)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Az '{parent}' alkatrész szerepel a '{self}' alkatrészjegyzékében (rekurzív)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "Az IPN belső cikkszámnak illeszkednie kell a {pattern} regex mintára" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "Alkatrész nem lehes saját magának verziója" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Verziók csak összeállított alkatrészeknél engedélyezettek" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Nem lehet sablon alkatrészből új verziót csinálni" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "A szülő alkatrésznek azonos sablonra kell mutatnia" -#: part/models.py:901 +#: part/models.py:902 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:1031 +#: part/models.py:1032 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:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "Adott alkatrész verzióból már létezik egy." -#: part/models.py:1054 +#: part/models.py:1055 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:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Szerkezeti kategóriákhoz nem lehet alkatrészeket rendelni!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Alkatrész neve" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Sablon-e" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Ez egy sablon alkatrész?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Ez az alkatrész egy másik változata?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Ebből a sablonból" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Alkatrész leírása (opcionális)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Kulcsszavak" -#: part/models.py:1133 +#: part/models.py:1134 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:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Alkatrész kategória" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN (Belső Cikkszám)" -#: part/models.py:1158 +#: part/models.py:1159 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:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Változat" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Ez egy másik alkatrész egy verziója?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Ennek a verziója" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Alapban hol tároljuk ezt az alkatrészt?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Alapértelmezett lejárat" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimális készlet" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Minimálisan megengedett készlet mennyiség" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Alkatrész mértékegysége" -#: part/models.py:1248 +#: part/models.py:1258 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:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 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:1266 +#: part/models.py:1276 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:1272 +#: part/models.py:1282 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:1278 +#: part/models.py:1288 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:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Aktív-e ez az alkatrész?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Lezárt alkatrészt nem lehet szerkeszteni" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "Alkatrészjegyzék ellenőrizve" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "Az alkatrész anyagjegyzéke érvényes?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Tárolt alkatrészjegyzék ellenőrző összeg" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Alkatrészjegyzéket ellenőrizte" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Alkatrészjegyzék ellenőrzési dátuma" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Létrehozó" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Alkatrész felelőse" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Több értékesítése" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Árszámítások gyorstárazásához használt pénznem" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Minimum alkatrészjegyzék költség" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Összetevők minimum költsége" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Maximum alkatrészjegyzék költség" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Összetevők maximum költsége" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Minimum beszerzési ár" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Eddigi minimum beszerzési költség" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Maximum beszerzési ár" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Eddigi maximum beszerzési költség" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Minimum belső ár" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Minimum költség a belső ársávok alapján" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Maximum belső ár" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Maximum költség a belső ársávok alapján" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Minimum beszállítói ár" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Minimum alkatrész ár a beszállítóktól" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Maximum beszállítói ár" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Maximum alkatrész ár a beszállítóktól" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Minimum alkatrészváltozat ár" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Alkatrészváltozatok számolt minimum költsége" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Maximum alkatrészváltozat ár" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Alkatrészváltozatok számolt maximum költsége" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Minimum költség" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Minimum költség felülbírálása" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Maximum költség" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Maximum költség felülbírálása" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Számított általános minimum költség" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Számított általános maximum költség" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Minimum eladási ár" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Minimum eladási ár az ársávok alapján" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Maximum eladási ár" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Maximum eladási ár az ársávok alapján" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Minimum eladási költség" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Eddigi minimum eladási ár" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Maximum eladási költség" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Eddigi maximum eladási ár" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Leltározható alkatrész" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Tételszám" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Egyedi készlet tételek száma a leltárkor" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Teljes készlet a leltárkor" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Dátum" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Leltározva ekkor" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Minimum készlet érték" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Becsült minimum raktárkészlet érték" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Maximum készlet érték" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Becsült maximum raktárkészlet érték" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Alkatrész értékesítési ársáv" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Alkatrész Teszt Sablon" -#: part/models.py:3655 +#: part/models.py:3665 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:3687 +#: part/models.py:3697 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:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Teszt név" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Add meg a teszt nevét" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Teszt azonosító" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Egyszerűsített Teszt azonosító" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Teszt leírása" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Adj hozzá egy leírást ehhez a teszthez" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Teszt engedélyezve?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Kötelező" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Szükséges-e hogy ez a teszt sikeres legyen?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Kötelező érték" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Kötelező melléklet" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Választható lehetőségek ehhez a Teszthez (vesszővel elválasztva)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 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:3968 +#: part/models.py:4030 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:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Szülő alkatrész kiválasztása" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Al alkatrész" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Válaszd ki az alkatrészjegyzékben használandó alkatrészt" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Alkatrészjegyzék mennyiség ehhez az alkatrészjegyzék tételhez" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Ez az alkatrészjegyzék tétel opcionális" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "Beállítás mennyiség" -#: part/models.py:4021 +#: part/models.py:4091 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:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "Veszteség" -#: part/models.py:4031 +#: part/models.py:4101 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:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "Kerekítési többszörös" -#: part/models.py:4044 +#: part/models.py:4114 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:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Alkatrészjegyzék tétel azonosító" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Alkatrészjegyzék tétel megjegyzései" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Ellenőrző összeg" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Alkatrészjegyzék sor ellenőrző összeg" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Jóváhagyva" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Ez a BOM tétel jóvá lett hagyva" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Öröklődött" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 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:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Al alkatrészt kötelező megadni" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Alkatrészjegyzék tétel helyettesítő" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Szülő alkatrészjegyzék tétel" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Helyettesítő alkatrész" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "1.rész" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "2.rész" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Válassz kapcsolódó alkatrészt" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Kapcsolati megjegyzés" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "Alkatrész kapcsolat nem hozható létre önmagával" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Már létezik duplikált alkatrész kapcsolat" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Szülő Kategória" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Felsőbb szintű alkatrész kategória" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Alkategóriák" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Eredmények" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Eszerint a sablon szerint rögzített eredmények száma" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Beszerzési pénzneme ennek a készlet tételnek" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "A fájl nem kép" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Eredeti alkatrész" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Válassz eredeti alkatrészt a másoláshoz" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Kép másolása" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Kép másolása az eredeti alkatrészről" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Alkatrészjegyzék másolása" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Alkatrészjegyzék másolása az eredeti alkatrészről" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Paraméterek másolása az eredeti alkatrészről" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Megjegyzések másolása" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Megjegyzések másolása az eredeti alkatrészről" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Teszt másolása" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "Teszt sablonok másolása az eredeti alkatrészről" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Kezdeti készlet mennyiség" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Kezdeti készlet hely" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Add meg a kezdeti készlet helyét" -#: part/serializers.py:476 +#: part/serializers.py:474 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:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Válassz gyártót (hagyd üresen ha nem kell létrehozni)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Gyártói cikkszám" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "A kiválasztott cég nem érvényes beszállító" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "A kiválasztott cég nem érvényes gyártó" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Van már ilyen gyártói alkatrész" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Van már ilyen beszállítói alkatrész" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Kategória neve" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Gyártásban" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "Az alkatrészből jelenleg ennyi van gyártás alatt" -#: part/serializers.py:853 +#: part/serializers.py:850 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:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Készlet tételek" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Verziók" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Teljes készlet" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Nem lefoglalt készlet" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Variánsok Raktárkészlet" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Alkatrész másolása" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Kezdeti adatok másolása egy másik alkatrészről" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Kezdeti készlet" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Kezdeti készlet mennyiség létrehozása" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Beszállító információ" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Kezdeti beszállító adatok hozzáadása" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Kategória paraméterek másolása" -#: part/serializers.py:993 +#: part/serializers.py:994 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:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Meglévő kép" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "A meglévő alkatrész képfájl neve" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "A képfájl nem létezik" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Teljes alkatrészjegyzék jóváhagyása" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Gyártható" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "Gyártásokhoz szükséges" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "Gyártási rendelésekhez foglalva" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "Értékesítési rendeléshez szükséges" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "Értékesítési rendeléshez lefoglalva" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Minimum ár" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Számított minimum ár felülbírálása" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Minimum ár pénzneme" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Maximum ár" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Számított maximum ár felülbírálása" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Maximum ár pénzneme" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Frissítés" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Alkatrész árak frissítése" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "A Minimum ár nem lehet nagyobb mint a Maximum ár" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "A Maximum ár nem lehet kisebb mint a Minimum ár" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Szülő összeállítás kiválasztása" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Összetevő alkatrész kijelölése" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Válassz alkatrészt ahonnan az alkatrészjegyzéket másoljuk" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Létező adat törlése" -#: part/serializers.py:2000 +#: part/serializers.py:1998 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:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Örököltekkel együtt" -#: part/serializers.py:2006 +#: part/serializers.py:2004 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:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Hibás sorok kihagyása" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Engedély a hibás sorok kihagyására" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Helyettesítő alkatrészek másolása" -#: part/serializers.py:2018 +#: part/serializers.py:2016 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" @@ -7100,15 +7205,15 @@ msgstr "Lefoglalandó mennyiség" msgid "Label printing failed" msgstr "Címkenyomtatás sikertelen" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "A címke PDF nyomtatása sikertelen" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "A címke HTML nyomtatása sikertelen" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Nincs elem a nyomtatáshoz" @@ -7169,7 +7274,7 @@ msgstr "Alapvető vonalkód támogatást ad" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7515,20 +7620,20 @@ msgstr "Változott alkatrész értesítés" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "A `{part.name}` alkatrészt aktiválták egy `{part_action}` eseménnyel" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF címkenyomtató" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "PDF címkék nyomtatásához beépített támogatás" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Debug mód" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Debug mód engedélyezése - nyers HTML-t ad vissza PDF helyett" @@ -7569,7 +7674,7 @@ msgstr "Szegély" msgid "Print a border around each label" msgstr "Az egyes címkék körüli margó" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Fekvő" @@ -8030,7 +8135,7 @@ msgstr "Plugin nem támogatja a címkenyomtatást" msgid "Invalid label dimensions" msgstr "Érvénytelen címke méretek" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Nincs érvényes tétel megadva a sablonhoz" @@ -8074,112 +8179,112 @@ msgstr "A nyomtatáson a modelhez kapcsolás" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Jelentés kimenetének mentése mellékletként a kapcsolt model példányhoz nyomtatáskor" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Fájlnév minta" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Minta a fájlnevek előállításához" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Sablon engedélyezve" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "A sablon által célzott model típus" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Szűrők" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Sablon lekérdezés szűrők (vesszővel elválasztott kulcs=érték párok)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Sablon file" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Lapméret a PDF riportokhoz" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Jelentés fekvő nézetben" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "Összevonás" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "Jelentés renderelése a kiválasztott tételekhez" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Jelentés a {self.name} sablon alapján" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "Szintaxis hiba a sablonban" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "Hiba a jelentés renderelésekor" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "Hiba a jelentés generálása során" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "Hiba a jelentés kimenetének összefésülése során" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Szélesség [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Címke szélessége, mm-ben" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Magasság [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Címke magassága, mm-ben" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "Címkenyomtatási hiba" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Részlet" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Riport részlet fájl" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Részlet fájl leírása" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Eszköz" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Riport asset fájl" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Asset fájl leírása" @@ -8276,7 +8381,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Sorozatszám" @@ -8539,7 +8644,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Készlet hely" @@ -8547,11 +8652,11 @@ msgstr "Készlet hely" msgid "Stock Locations" msgstr "Készlethelyek" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Tulajdonos" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Tulajdonos kiválasztása" @@ -8559,7 +8664,7 @@ msgstr "Tulajdonos kiválasztása" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "A szerkezeti raktári helyekre nem lehet direktben raktározni, csak az al-helyekre." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Külső" @@ -8579,274 +8684,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "a(z) {field} nem létezik" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Alkatrész kiválasztása kötelező" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "A szerkezeti raktári helyre nem lehet készletet felvenni!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Virtuális alkatrészből nem lehet készletet létrehozni" -#: stock/models.py:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "A tétel nem tartozhat saját magához" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 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:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Szülő készlet tétel" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Kiindulási alkatrész" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Hol található ez az alkatrész?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 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:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Beépítve ebbe" -#: stock/models.py:1075 +#: stock/models.py:1099 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:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Sorozatszám ehhez a tételhez" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batch kód ehhez a készlet tételhez" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Készlet mennyiség" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Forrás gyártás" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Gyártás ehhez a készlet tételhez" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Felhasználva ebben" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Felhasználva ebben a gyártásban" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Forrás beszerzési rendelés" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Beszerzés ehhez a készlet tételhez" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Cél vevői rendelés" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Törlés ha kimerül" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Készlet tétel törlése ha kimerül" -#: stock/models.py:1209 +#: stock/models.py:1233 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:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Alkatrésszé alakítva" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "Mennyiség meghaladja az elérhető készletet" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Az alkatrész nem követésre kötelezett" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Mennyiség egész szám kell legyen" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Sorozatszámokat listában kell megadni" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "A mennyiség nem egyezik a megadott sorozatszámok számával" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "Nem lehet készletet strukturális helyre rendelni" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Ez a Teszt sablon nem létezik" -#: stock/models.py:2071 +#: stock/models.py:2095 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:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Készlet tétel beépül egy másikba" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "A készlet tétel más tételeket tartalmaz" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Készlet tétel hozzárendelve egy vevőhöz" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Készlet tétel gyártás alatt" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Követésre kötelezett készlet nem vonható össze" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplikált készlet tételek vannak" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "A készlet tétel ugyanarra az alkatrészre kell vonatkozzon" -#: stock/models.py:2106 +#: stock/models.py:2130 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:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Készlet tételek állapotainak egyeznie kell" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "Készlettörténet" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Bejegyzés megjegyzései" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "Készlet Tétel Ellenőrzés Eredménye" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Ehhez a teszthez meg kell adni értéket" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Ehhez a teszthez fel kell tölteni mellékletet" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "A teszt eredménye érvénytelen" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Teszt eredménye" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Teszt kimeneti értéke" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Teszt eredmény melléklet" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Tesztek megjegyzései" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Teszt állomás" -#: stock/models.py:3087 +#: stock/models.py:3111 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:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Elkezdődött" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "A teszt indításának időpontja" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Befejezve" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "A teszt befejezésének időpontja" @@ -8930,7 +9043,7 @@ msgstr "Írd be a sorozatszámokat az új tételekhez" msgid "Supplier Part Number" msgstr "Beszállítói Cikkszám" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Lejárt" @@ -9467,131 +9580,131 @@ msgstr "Token utolsó használata" msgid "Revoked" msgstr "Visszavonva" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Jogosultságok" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Nézet" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Jogosultság tételek megtekintéséhez" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Hozzáad" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Jogosultság tételek hozzáadásához" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Módosítás" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Jogosultság tételek szerkesztéséhez" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Törlés" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Jogosultság tételek törléséhez" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "Robot" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Belső" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Vendég" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Nyelv" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Felhasználó által preferált nyelv" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Téma" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Web UI JSON beállításai - kézzel nem szabad szerkeszteni!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Widgetek" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "Dashboard widgetek JSON beállításai - kézzel szerkeszteni tilos!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Megjelenítendő név" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Felhasználó választott megjelenítési neve" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Pozíció" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "Fő munkakör vagy pozíció" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Felhasználói állapot üzenet" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "Felhasználó földrajzi helye" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "A felhasználó éppen használja a rendszert" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "Javasolt elérhetőségek" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Felhasználó típusa" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "Milyen típusú ez a felhasználó?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Szervezet" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "Felhasználó elsődleges szervezete/kötődése" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Elsődleges csoport" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "Felhasználó elsődleges csoportja" diff --git a/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/id/LC_MESSAGES/django.po index 341c020d27..028aec99e2 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Indonesian\n" "Language: id_ID\n" @@ -89,6 +89,7 @@ msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Jumlah yang diberikan tidak valid" @@ -104,11 +105,11 @@ msgstr "Masukkan tanggal" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Koneksi Galat" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Ukuran gambar terlalu besar" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "URL yang diberikan bukan file gambar yang valid" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "Surel" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Anda harus mengaktifkan autentikasi dua faktor sebelum melakukan hal lainnya." @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Pilihan tidak valid" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nama" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Keterangan" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Keterangan (opsional)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Direktori" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Data Barcode" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Data barcode pihak ketiga" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Hash unik data barcode" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Sudah ada barcode yang sama" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Terjadi Kesalahan Server" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Sebuah kesalahan telah dicatat oleh server." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Harus berupa angka yang valid" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Mata Uang" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Nilai tidak valid" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL file gambar external" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Unduhan gambar dari URL external tidak aktif" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "Bukan kode mata uang yang valid" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "Produksi Induk" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Bagian" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Pesanan harus dibatalkan sebelum dapat dihapus" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Order Produksi" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Lokasi" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Referensi Order Produksi" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Status pembuatan" msgid "Build status code" msgstr "Kode status pembuatan" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kode Kelompok" @@ -870,8 +855,8 @@ msgstr "Kode Kelompok" msgid "Batch code for this build output" msgstr "Kode kelompok untuk hasil produksi ini" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Tanggal Pembuatan" @@ -891,7 +876,7 @@ msgstr "Target tanggal selesai" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Tanggal selesai" @@ -907,8 +892,8 @@ msgstr "Diserahkan oleh" msgid "User who issued this build order" msgstr "Pengguna yang menyerahkan order ini" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Penanggung Jawab" @@ -917,12 +902,12 @@ msgstr "Penanggung Jawab" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Tautan eksternal" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Tautan menuju URL eksternal" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Tidak ada hasil produksi yang ditentukan" @@ -980,47 +965,47 @@ msgstr "Hasil produksi sudah selesai" msgid "Build output does not match Build Order" msgstr "Hasil produksi tidak sesuai dengan order produksi" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Jumlah harus lebih besar daripada nol" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "Jumlah" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Jumlah harus 1 untuk stok dengan nomor seri" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Item stok teralokasikan terlalu banyak" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stok Item" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Sumber stok item" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Jumlah stok yang dialokasikan ke produksi" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Pasang ke" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Tujuan stok item" @@ -1099,7 +1084,7 @@ msgstr "Tujuan stok item" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "Jumlah bagian yang dapat dilacak harus berupa angka bulat" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Nomor Seri" @@ -1156,8 +1141,8 @@ msgstr "Alokasikan nomor seri secara otomatis" msgid "Automatically allocate required items with matching serial numbers" msgstr "Alokasikan item yang diperlukan dengan nomor seri yang sesuai secara otomatis" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Nomor-nomor seri berikut sudah ada atau tidak valid" @@ -1245,7 +1230,7 @@ msgstr "Terima bahwa stok item tidak teralokasikan sepenuhnya ke pesanan ini" msgid "Required stock has not been fully allocated" msgstr "Stok yang diperlukan belum teralokasikan sepenuhnya" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Terima Tidak Selesai" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part harus mengarah ke bagian yang sesuai dengan order produksi msgid "Item must be in stock" msgstr "Item harus tersedia dalam stok" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Jumlah tersedia ({q}) terlampaui" @@ -1306,7 +1291,7 @@ msgstr "Hasil produksi harus ditentukan untuk mengalokasikan bagian yang terlaca 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Item yang dialokasikan harus disediakan" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Item tagihan material" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Pengguna" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Harga" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktif" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Judul" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Tautan" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Kesimpulan" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Berkas Gambar" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Lampiran" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "File tidak ditemukan" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Tautan eksternal tidak ditemukan" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Pilih file untuk dilampirkan" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Komentar" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Ukuran Berkas" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Model" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Terbuat" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Pilihan" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Aktif" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Respon" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Barang diterima" @@ -2457,7 +2470,7 @@ msgstr "Nama File" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "Hari" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponen" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Aktifkan Laporan" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Ukuran Halaman" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Surel diperlukan" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Aktifkan Integrasi Antarmuka" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Kontak alamat surel" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontak" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Tidak diketahui" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Selesai" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Total Harga" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Status" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Pelanggan" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Harga Jual" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Dikirim" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Jumlah yang dialokasikan harus lebih dari nol" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "Order ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Salin Baris" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Tanggal" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Harga Minimal" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Harga Maksimal" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Perbarui" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Nomor Seri" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Lampiran perlu diunggah untuk tes ini" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Ganti" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/it/LC_MESSAGES/django.po index 35c6737e65..72f0bcb43d 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Italian\n" "Language: it_IT\n" @@ -89,6 +89,7 @@ msgstr "Impossibile convertire {original} in {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Quantità inserita non valida" @@ -104,11 +105,11 @@ msgstr "Inserisci la data" msgid "Invalid decimal value" msgstr "Valore decimale non valido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Errore di connessione" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Il server ha risposto con un codice di stato non valido" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Si è verificata un'eccezione" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Il server ha risposto con valore Content-Length non valido" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Immagine troppo grande" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Il download dell'immagine ha superato la dimensione massima" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Il server remoto ha restituito una risposta vuota" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "L'URL fornito non è un file immagine valido" @@ -219,7 +220,7 @@ msgstr "Accedi all'app" msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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." @@ -263,124 +264,108 @@ msgstr "Il campo deve corrispondere al modello richiesto" msgid "Reference number is too large" msgstr "Numero di riferimento troppo grande" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Scelta non valida" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Descrizione" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Descrizione (opzionale)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Percorso" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomi duplicati non possono esistere sotto lo stesso genitore" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Note di Markdown (opzionale)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Dati del Codice a Barre" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Dati Codice a Barre applicazioni di terze parti" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Codice a Barre" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Codice univoco del codice a barre" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Trovato codice a barre esistente" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Errore del server" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Un errore è stato loggato dal server." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Deve essere un numero valido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Selezionare la valuta dalle opzioni disponibili" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Questo campo non può essere nullo." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Valore non valido" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Immagine Remota" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL del file immagine remota" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Il download delle immagini da URL remoto non è abilitato" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Impossibile scaricare l'immagine dall'URL remoto" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Formato tipo di contenuto non valido" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "Tipo di Contenuto non trovato" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "Il tipo di contenuto non corrisponde alla classe mixin richiesta" @@ -552,8 +537,8 @@ msgstr "Unità fisica non valida" msgid "Not a valid currency code" msgstr "Non è un codice valuta valido" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Stato dell'ordine" @@ -561,21 +546,21 @@ msgstr "Stato dell'ordine" msgid "Parent Build" msgstr "Produzione Genitore" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Includi Varianti" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Includi Varianti" msgid "Part" msgstr "Articolo" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -605,7 +590,7 @@ msgstr "Categoria" msgid "Ancestor Build" msgstr "Produzione Antenata" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Assegnato a me" @@ -653,11 +638,11 @@ msgstr "Completato prima" msgid "Completed after" msgstr "Completato dopo" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Data minima" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Data massima" @@ -669,16 +654,16 @@ msgstr "Escludi Albero" msgid "Build must be cancelled before it can be deleted" msgstr "La produzione deve essere annullata prima di poter essere eliminata" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opzionale" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Assemblaggio" @@ -687,32 +672,32 @@ msgstr "Assemblaggio" msgid "Tracked" msgstr "Monitorato" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testabile" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Ordine In Corso" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Allocato" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Utilizzato" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Ordinato" @@ -720,7 +705,7 @@ msgstr "Ordinato" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Ordine di Produzione" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Posizione" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Output" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Riferimento Ordine Di Produzione" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Stato Produzione" msgid "Build status code" msgstr "Codice stato di produzione" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Codice Lotto" @@ -870,8 +855,8 @@ msgstr "Codice Lotto" msgid "Batch code for this build output" msgstr "Codice del lotto per questa produzione" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Data di creazione" @@ -891,7 +876,7 @@ msgstr "Data completamento obiettivo" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Data di completamento" @@ -907,8 +892,8 @@ msgstr "Rilasciato da" msgid "User who issued this build order" msgstr "Utente che ha emesso questo ordine di costruzione" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsabile" @@ -917,12 +902,12 @@ msgstr "Responsabile" msgid "User or group responsible for this build order" msgstr "Utente o gruppo responsabile di questo ordine di produzione" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Collegamento esterno" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link a URL esterno" @@ -934,8 +919,8 @@ msgstr "Priorità di produzione" msgid "Priority of this build order" msgstr "Priorità di questo ordine di produzione" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Codice del progetto" @@ -968,7 +953,7 @@ msgstr "L'ordine di produzione è stato completato" msgid "Serial numbers must be provided for trackable parts" msgstr "Deve essere fornita un numero di serie per gli articoli rintracciabili" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nessun output di produzione specificato" @@ -980,47 +965,47 @@ msgstr "La produzione è stata completata" msgid "Build output does not match Build Order" msgstr "L'output della produzione non corrisponde all'ordine di compilazione" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "La quantità deve essere maggiore di zero" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "La quantità non può essere maggiore della quantità in uscita" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "La produzione non ha superati tutti i test richiesti" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "Impossibile completare parzialmente un build output con gli elementi assegnati" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Elemento di Riga Ordine di Produzione" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Crea oggetto" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Crea oggetto" msgid "Quantity" msgstr "Quantità" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Quantità richiesta per l'ordine di costruzione" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Quantità di articoli magazzino consumate" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "L'articolo in stock selezionato non corrisponde alla voce nella BOM" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "La quantità assegnata deve essere maggiore di zero" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "La quantità deve essere 1 per lo stock serializzato" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "L'articolo in giacenza è sovrallocato" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Articoli in magazzino" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Origine giacenza articolo" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Quantità di magazzino da assegnare per la produzione" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Installa in" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Destinazione articolo in giacenza" @@ -1099,7 +1084,7 @@ msgstr "Destinazione articolo in giacenza" msgid "Build Level" msgstr "Livello Produzione" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Nome Articolo" @@ -1135,7 +1120,7 @@ msgstr "Quantità totale richiesta per articoli rintracciabili" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Codice Seriale" @@ -1156,8 +1141,8 @@ msgstr "Numeri di Serie Assegnazione automatica" msgid "Automatically allocate required items with matching serial numbers" msgstr "Assegna automaticamente gli articoli richiesti con i numeri di serie corrispondenti" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "I seguenti numeri di serie sono già esistenti o non sono validi" @@ -1245,7 +1230,7 @@ msgstr "Accetta che gli elementi in giacenza non sono stati completamente assegn msgid "Required stock has not been fully allocated" msgstr "La giacenza richiesta non è stata completamente assegnata" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Accetta Incompleta" @@ -1293,7 +1278,7 @@ msgstr "gli elementi degli articoli della distinta base devono puntare alla stes msgid "Item must be in stock" msgstr "L'articolo deve essere disponibile" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantità disponibile ({q}) superata" @@ -1306,7 +1291,7 @@ msgstr "L'output di produzione deve essere specificato per l'ubicazione delle pa 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Deve essere indicata l'allocazione dell'articolo" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Costruzione" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Articolo Fornitore" @@ -1404,7 +1389,7 @@ msgstr "Riferimento Ordine Di Costruzione" msgid "Part Category Name" msgstr "Nome Categoria Articolo" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Tracciabile" @@ -1412,29 +1397,29 @@ msgstr "Tracciabile" msgid "Inherited" msgstr "Ereditato" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Consenti Le Varianti" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Distinta base (Bom)" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "In Produzione" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Pianificato per la produzione" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Scorte esterne" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Disponibilità in magazzino" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "L'utente non ha il permesso di eliminare questi allegati" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "L'utente non ha il permesso di eliminare questo allegato" @@ -1554,610 +1543,634 @@ msgstr "Nessun plugin" msgid "Project Code Label" msgstr "Etichetta Codice Progetto" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Aggiornato" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Orario dell'ultimo aggiornamento" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Aggiornato da" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Utente che per ultimo ha aggiornato questo oggetto" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Codice unico del progetto" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Descrizione del progetto" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Utente o gruppo responsabile di questo progetto" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Tasto impostazioni" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Valore impostazioni" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Il valore specificato non è un opzione valida" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Il valore deve essere un valore booleano" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Il valore deve essere un intero" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Il valore deve essere un numero valido" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Il valore non supera i controlli di convalida" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "La stringa chiave deve essere univoca" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Utente" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Quantità prezzo limite" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Prezzo" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Prezzo unitario in quantità specificata" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Scadenza" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Scadenza in cui questa notifica viene ricevuta" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Nome per questa notifica" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Attivo" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "È questa notifica attiva" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token per l'accesso" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Segreto" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Segreto condiviso per HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID Messaggio" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Identificatore unico per questo messaggio" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Host" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Host da cui questo messaggio è stato ricevuto" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Intestazione" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Intestazione di questo messaggio" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Contenuto" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Contenuto di questo messaggio" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Scadenza in cui questo messaggio è stato ricevuto" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Lavorato il" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Il lavoro su questo messaggio è terminato?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Titolo" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Collegamento" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Pubblicato" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autore" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Riepilogo" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Letto" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Queste notizie sull'elemento sono state lette?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "File immagine" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Tipo di modello di destinazione per questa immagine" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "ID modello di destinazione per questa immagine" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Unità Personalizzata" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Il simbolo dell'unità deve essere univoco" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Il nome dell'unità deve essere un identificatore valido" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Nome dell'unità" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Simbolo" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Simbolo unità opzionale" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definizione" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definizione unità" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Allegato" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "File mancante" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Link esterno mancante" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Tipo modello" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Tipo di modello di destinazione per l'immagine" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Seleziona file da allegare" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Commento" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Commento allegato" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Data caricamento" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Data di caricamento del file" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Dimensione file" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Dimensioni file in byte" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Tipo di modello specificato per l'allegato non valido" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Stato Personalizzato" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Stati Personalizzati" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Imposta Stato Di Riferimento" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Set di stato esteso con questo stato personalizzato" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Chiave Logica" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Valore" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "Valore numerico che verrà salvato nel database dei modelli" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Nome dello Stato" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etichetta" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Etichetta che verrà visualizzata nel frontend" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Colore" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Colore che verrà visualizzato nel frontend" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Modello" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Modello a cui questo stato è associato" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Il modello deve essere selezionato" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "La chiave deve essere selezionata" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "La chiave logica deve essere selezionata" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "La chiave deve essere diversa dalla chiave logica" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Deve essere fornita una classe di stato di riferimento valida" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 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:2206 +#: common/models.py:2281 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:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Elenco Selezioni" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Elenchi di Selezione" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Nome dell'elenco di selezione" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Descrizione della lista di selezione" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Bloccato" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Questa lista di selezione è bloccata?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Questo elenco di selezione può essere utilizzato?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Plugin Sorgente" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Plugin che fornisce l'elenco di selezione" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Stringa Sorgente" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "Stringa opzionale che identifica il sorgente usato per questa lista" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Voce Predefinita" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Voce predefinita per questo elenco di selezione" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Creato" -#: common/models.py:2303 +#: common/models.py:2378 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:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Ultimo aggiornamento" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Voce Lista Selezione" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Voci Lista Selezione" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Elenco di selezione a cui appartiene questa voce" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Valore della voce della lista di selezione" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Etichetta per la voce elenco di selezione" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Descrizione della voce della lista di selezione" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Questa voce della lista di selezione è attiva?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Modello Parametro" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "Modelli parametro" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "I parametri della casella di controllo non possono avere unità" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "I parametri della casella di controllo non possono avere scelte" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Le scelte devono essere uniche" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Il nome del modello del parametro deve essere univoco" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "Tipo di modello di destinazione per questo modello di parametro" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Nome Parametro" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Unità" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Unità fisiche per questo parametro" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Descrizione del parametro" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Casella di spunta" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Questo parametro è una casella di spunta?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Scelte" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Scelte valide per questo parametro (separato da virgola)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Lista di selezione per questo parametro" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Abilitato" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "Questo modello di parametro è abilitato?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "Parametro" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "Parametri" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Scelta non valida per il valore del parametro" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Tipo di modello specificato per parametro non valido" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "ID Modello" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "ID del modello di destinazione per questo parametro" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Modello" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "Modello Parametro" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Dati" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Valore del Parametro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Valore del Parametro" msgid "Note" msgstr "Nota" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Note opzionali elemento" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Scansione Codice A Barre" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Dati del Codice a Barre" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Utente che ha scannerizzato il codice a barre" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Data e ora" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Data e ora della scansione del codice a barre" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "Endpoint URL che ha elaborato il codice a barre" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Contesto" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Dati contestuali per la scansione del codice a barre" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Risposta" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Dati di risposta dalla scansione del codice a barre" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Risultato" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "La scansione del codice a barre è riuscita?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Si è verificato un errore" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "Messaggio email" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "Messaggi email" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Annunciato" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Inviato" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Fallito" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Consegnato" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Confermato" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Ricevuti" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "In uscita" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Nessuna risposta" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Traccia La Consegna" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Conferma di lettura" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Tracciare i clic delle email" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "ID Globale" -#: common/models.py:3096 +#: common/models.py:3171 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:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "ID discussione" -#: common/models.py:3105 +#: common/models.py:3180 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:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Discussione" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Thread collegato a questo messaggio" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "Priorità" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "Discussione Email" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "Discussioni Email" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chiave" -#: common/models.py:3183 +#: common/models.py:3258 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:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Identificatore univoco per questa discussione" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Avviato internamente" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Questa discussione è iniziata internamente?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Data e ora in cui la discussione è stata creata" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Data e ora in cui la discussione è stata aggiornata" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Elemento ricevuto" @@ -2457,7 +2470,7 @@ msgstr "Nome del file" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Tipo di modello" @@ -2601,13 +2614,13 @@ msgstr "Intervallo Aggiornamento Valuta" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "giorni" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Plugin di aggiornamento valuta da usare" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Scarica dall'URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Limite Dimensione Download" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Dimensione massima consentita per il download dell'immagine remota" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "User-agent utilizzato per scaricare dall'URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Convalida URL rigoroso" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Richiede specifico schema quando si convalidano gli URL" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Aggiorna intervallo di controllo" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Backup automatico" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Abilita il backup automatico di database e file multimediali" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Intervallo Di Backup Automatico" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Intervallo Eliminazione Attività" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Intervallo Di Cancellazione Registro Errori" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Intervallo Di Cancellazione Notifica" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "Intervallo Eliminazione Email" -#: common/setting/system.py:363 +#: common/setting/system.py:343 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:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "Proteggi Log Email" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "Impedisci l'eliminazione delle voci di log email" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Supporto Codice A Barre" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Memorizza Risultati Barcode" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "Memorizza i risultati della scansione del codice a barre nel database" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Numero Massimo Scansioni Barcode" -#: common/setting/system.py:389 +#: common/setting/system.py:369 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:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Codice a barre inserito scaduto" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Tempo di ritardo di elaborazione codice a barre" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Codice a Barre Supporto Webcam" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "Consenti la scansione del codice a barre tramite webcam nel browser" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Visualizza dati codice a barre" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Visualizza i dati del codice a barre nel browser come testo" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Plugin Generazione Codice A Barre" -#: common/setting/system.py:414 +#: common/setting/system.py:394 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:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Revisioni Articolo" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Abilita il campo revisione per l'articolo" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Solo revisione assemblaggio" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Consenti revisioni solo per articoli di assemblaggio" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Consenti l'eliminazione dall'assemblaggio" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Schema di espressione regolare per l'articolo corrispondente IPN" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Consenti duplicati IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Permetti a più articoli di condividere lo stesso IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Permetti modifiche al part number interno (IPN)" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Copia I Dati Della distinta base dell'articolo" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Copia I Dati Parametro dell'articolo" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Copia I Dati dell'Articolo Test" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Copia Template Parametri Categoria" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Gli articoli sono modelli per impostazione predefinita" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Componente" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Acquistabile" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Vendibile" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Gli articoli sono acquistabili per impostazione predefinita" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Gli articoli sono tracciabili per impostazione predefinita" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuale" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Gli articoli sono virtuali per impostazione predefinita" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Mostra articoli correlati" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Visualizza parti correlate per ogni articolo" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Dati iniziali dello stock" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Dati iniziali del fornitore" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Formato di visualizzazione del nome articolo" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Formato per visualizzare il nome dell'articolo" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Icona predefinita Categoria Articolo" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "Icona predefinita Categoria Articolo (vuoto significa nessuna icona)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Prezzi Minimi Decimali" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Prezzi Massimi Decimali" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Usa Prezzi Fornitore" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Ignora la Cronologia Acquisti" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Utilizzare i prezzi degli articoli in stock" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Età dei prezzi degli articoli in stock" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Utilizza Variazione di Prezzo" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Includi la variante dei prezzi nei calcoli dei prezzi complessivi" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Solo Varianti Attive" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Aggiornamento Automatico Prezzi" -#: common/setting/system.py:627 +#: common/setting/system.py:607 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:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Intervallo Di Ricostruzione Dei Prezzi" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Prezzi interni" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Abilita prezzi interni per gli articoli" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Sovrascrivi Prezzo Interno" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Abilita stampa etichette" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Abilita la stampa di etichette dall'interfaccia web" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Etichetta Immagine DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Abilita Report di Stampa" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Abilita generazione di report di stampa" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Modalità Debug" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Genera report in modalità debug (output HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Registro errori" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Errori di log che si verificano durante la generazione dei report" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Dimensioni pagina" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Dimensione predefinita della pagina per i report PDF" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Forza Unità Parametro" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Seriali Unici Globali" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Elimina scorte esaurite" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Modello Codice a Barre" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Scadenza giacenza" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Abilita funzionalità di scadenza della giacenza" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Vendi giacenza scaduta" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Consenti la vendita di stock scaduti" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Tempo di Scorta del Magazzino" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Crea giacenza scaduta" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Permetti produzione con stock scaduto" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Controllo della proprietà della giacenza" -#: common/setting/system.py:753 +#: common/setting/system.py:745 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:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Icona Predefinita Ubicazione di Magazzino" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Icona Predefinita Ubicazione di Magazzino (vuoto significa nessuna icona)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Mostra articoli a magazzino installati" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Visualizza gli articoli a magazzino installati nelle tabelle magazzino" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Verificare la distinta base durante l'installazione degli articoli" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Consenti trasferimento magazzino esaurito" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Modello Di Riferimento Ordine Di Produzione" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "È richiesto il Proprietario Responsabile" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "A ogni ordine deve essere assegnato un proprietario responsabile" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Richiede Articolo Attivo" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "Impedisci la creazione di ordini di produzione per gli articolo inattivi" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Richiede Articolo Bloccato" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "Impedisci la creazione di ordini di costruzione per le parti sbloccate" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Richiede un BOM valido" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Richiedi Ordini Dei Figli Chiusi" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Ordini di Produzione Esterni" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Abilita funzionalità ordini di produzione esterni" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blocca Fino Al Passaggio Dei Test" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Gli ordini di vendita contrassegnati come spediti saranno automaticamente completati, bypassando lo stato \"spedito\"" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Modello di Riferimento Ordine D'Acquisto" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Modifica Ordini Di Acquisto Completati" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Converti Valuta" -#: common/setting/system.py:931 +#: common/setting/system.py:939 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:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Completa Automaticamente Gli Ordini D'Acquisto" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Abilita password dimenticata" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Abilita la funzione password dimenticata nelle pagine di accesso" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Abilita registrazione" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "SSO abilitato" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Abilita SSO nelle pagine di accesso" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Abilita registrazione SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Abilita sincronizzazione dei gruppi SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "Chiave gruppo SSO" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "Mappa del gruppo SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Rimuovere i gruppi al di fuori dell'SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email richiesta" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Richiedi all'utente di fornire una email al momento dell'iscrizione" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Riempimento automatico degli utenti SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Posta due volte" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Password due volte" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Domini consentiti" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Gruppo iscrizione" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Applica MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Gli utenti devono utilizzare la sicurezza a due fattori." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 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:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Controlla i plugin all'avvio" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Controlla gli aggiornamenti dei plugin" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Abilita controlli periodici per gli aggiornamenti dei plugin installati" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Abilita l'integrazione URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Attiva plugin per aggiungere percorsi URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Attiva integrazione navigazione" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Abilita i plugin per l'integrazione nella navigazione" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Abilita l'app integrata" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Abilita plugin per aggiungere applicazioni" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Abilita integrazione pianificazione" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Abilita i plugin per eseguire le attività pianificate" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Abilita eventi integrati" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Abilita plugin per rispondere agli eventi interni" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Abilita integrazione interfaccia" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Abilita i plugin per l'integrazione nell'interfaccia utente" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "Abilita integrazione email" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Abilita i plugin per elaborare le email in uscita/in arrivo" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Abilita codici progetto" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Abilita i codici del progetto per tracciare i progetti" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 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:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Escludi Posizioni Esterne" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Inventario periodico automatico" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Visualizza i nomi completi degli utenti" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Mostra nomi completi degli utenti invece che nomi utente" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Visualizza Profili Utente" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Visualizza i profili degli utenti sulla pagina del loro profilo" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Abilita Dati Stazione Di Prova" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 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:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "Abilita Ping Macchina" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 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" @@ -3951,6 +4008,14 @@ msgstr "Ultime stampanti usate" msgid "Save the last used printing machines for a user" msgstr "Salva le ultime stampanti usate da un'utente" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "Tutti i modelli" @@ -4012,8 +4077,8 @@ msgstr "L'articolo interno è attivo" msgid "Supplier is Active" msgstr "Il fornitore è attivo" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Produttore" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Indirizzo email" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Contatto" @@ -4111,7 +4176,7 @@ msgstr "Partita IVA" msgid "Company Tax ID" msgstr "Codice Fiscale Azienda" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Indirizzo" @@ -4203,12 +4268,12 @@ msgstr "Note di spedizione per uso interno" msgid "Link to address information (external)" msgstr "Collegamento alle informazioni sull'indirizzo (esterno)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Codice articolo produttore" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Articolo di base" @@ -4221,8 +4286,8 @@ msgstr "Seleziona articolo" msgid "Select manufacturer" msgstr "Seleziona Produttore" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "Codice articolo produttore (MPN)" @@ -4250,8 +4315,8 @@ msgstr "Le unità del pacchetto devono essere maggiori di zero" msgid "Linked manufacturer part must reference the same base part" msgstr "L'articolo del costruttore collegato deve riferirsi alla stesso articolo" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Fornitore" msgid "Select supplier" msgstr "Seleziona fornitore" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Unità di giacenza magazzino fornitore" @@ -4290,15 +4355,15 @@ msgstr "URL dell'articolo del fornitore" msgid "Supplier part description" msgstr "Descrizione articolo fornitore" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "costo base" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Onere minimo (ad esempio tassa di stoccaggio)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Confezionamento" @@ -4315,7 +4380,7 @@ msgstr "Quantità Confezione" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "multiplo" @@ -4339,23 +4404,23 @@ msgstr "Data dell’ultimo aggiornamento dei dati sulla disponibilità" msgid "Supplier Price Break" msgstr "Sconto Prezzo Fornitore" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Valuta predefinita utilizzata per questo fornitore" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Nome Azienda" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "In magazzino" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "Sconti a scalare" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Dati riga originali" msgid "Errors" msgstr "Errori" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Valido" @@ -4623,7 +4688,7 @@ msgstr "Numero di copie da stampare per ogni etichetta" msgid "Connected" msgstr "Connesso" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Sconosciuto" @@ -4727,7 +4792,7 @@ msgstr "Chiave della proprietà" msgid "Value of the property" msgstr "Valore della proprietà" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Gruppo" @@ -4751,117 +4816,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:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Riferimento ordine" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "In Sospeso" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Ha il codice del progetto" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Creato Da" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Creato prima" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Creato dopo" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Ha data d'inizio" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Data d'inizio prima" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Data d'inizio dopo" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Ha data di fine" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Data obiettivo prima" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Data obiettivo dopo" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Prezzo Articolo" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Completato prima" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Completato dopo" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Ordine di Produzione Esterno" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Ordine" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Ordine completato" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Articolo interno" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Ordine in sospeso" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Completato" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Ha Spedizione" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Ordine D'Acquisto" msgid "Sales Order" msgstr "Ordini di Vendita" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Prezzo Totale" msgid "Total price for this order" msgstr "Prezzo totale dell'ordine" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Valuta ordine" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "L'indirizzo non corrisponde all'azienda selezionata" msgid "Order description (optional)" msgstr "Descrizione dell'ordine (opzionale)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Seleziona il codice del progetto per questo ordine" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Collegamento a un sito web esterno" @@ -4930,7 +4995,7 @@ msgstr "Data iniziale" msgid "Scheduled start date for this order" msgstr "Data d'inizio programmata per questo ordine" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data scadenza" @@ -4963,12 +5028,12 @@ msgstr "Punto di contatto per questo ordine" msgid "Company address for this order" msgstr "Indirizzo dell'azienda per questo ordine" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Riferimento ordine" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Stato" @@ -4992,15 +5057,15 @@ msgstr "Codice di riferimento ordine fornitore" msgid "received by" msgstr "ricevuto da" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Data ordine completato" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Destinazione" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Destinazione per gli elementi ricevuti" @@ -5024,616 +5089,624 @@ msgstr "La quantità deve essere un numero positivo" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Azienda da cui sono stati ordinati gli elementi" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Stato ordine di vendita" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Riferimento Cliente " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Codice di riferimento Ordine del Cliente" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Data di spedizione" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "spedito da" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "L'ordine è già stato completato" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "L'ordine è già stato annullato" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Solo un ordine aperto può essere contrassegnato come completo" -#: order/models.py:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "L'ordine è bloccato e non può essere modificato" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Quantità Elementi" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Riferimento Linea Elemento" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Note linea elemento" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Descrizione della parte (opzionale)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Contesto aggiuntivo per questa voce" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Prezzo unitario" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Riga ordine d'acquisto" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "L'articolo del fornitore deve corrispondere al fornitore" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "L'ordine di produzione deve essere contrassegnato come esterno" -#: order/models.py:1951 +#: order/models.py:1971 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:1957 +#: order/models.py:1977 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:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Articolo Fornitore" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Ricevuto" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Numero di elementi ricevuti" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Prezzo di Acquisto" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Prezzo di acquisto unitario" -#: order/models.py:2025 +#: order/models.py:2056 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:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Riga Extra ordine di acquisto" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Articolo ordine di vendita" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Prezzo di Vendita" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Prezzo unitario di vendita" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Spedito" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Quantità spedita" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Spedizione dell'ordine di vendita" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "L'indirizzo di spedizione deve corrispondere al cliente" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "Indirizzo di consegna per questa spedizione" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Data di spedizione" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Data di consegna" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Data di consegna della spedizione" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Verificato Da" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Utente che ha controllato questa spedizione" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Spedizione" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Numero di spedizione" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Numero di monitoraggio" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Informazioni di monitoraggio della spedizione" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Numero Fattura" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Numero di riferimento per la fattura associata" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "La spedizione è già stata spedita" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "La spedizione non ha articoli di stock assegnati" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "La spedizione deve essere controllata prima che possa essere completata" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Riga Extra ordine di vendita" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Assegnazione Ordini Di Vendita" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "L'elemento di magazzino non è stato assegnato" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Impossibile allocare stock a una riga senza un articolo" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "La quantità di ripartizione non puo' superare la disponibilità della giacenza" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "La quantità di assegnazione deve essere maggiore di zero" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "La quantità deve essere 1 per l'elemento serializzato" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "L'ordine di vendita non corrisponde alla spedizione" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 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:2614 +#: order/models.py:2645 msgid "Line" msgstr "Linea" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Riferimento della spedizione ordine di vendita" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Elemento" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Seleziona elemento stock da allocare" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Inserisci la quantità assegnata alla giacenza" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Riferimento ordine di reso" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Società a cui vengono restituiti gli articoli" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Stato ordine di reso" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Articolo Linea Ordine Reso" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "L'elemento stock deve essere specificato" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "Quantità di reso superiore alla quantità di scorta" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "La quantità di reso deve essere maggiore di zero" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Quantità non valida per l'elemento stock serializzato" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Seleziona l'elemento da restituire dal cliente" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Data di ricezione" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "La data in cui questo articolo restituito è stato ricevuto" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Risultati" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Risultato per questa voce di riga" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Riga Extra ordine di reso" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "ID Ordine" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID dell'ordine da duplicare" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Copia Linee" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Copia gli elementi di riga dall'ordine originale" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Copia Linee Extra" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Copia gli elementi di riga extra dall'ordine originale" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Copia parametri" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Righe Completate" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Duplica Ordine" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Specifica le opzioni per duplicare questo ordine" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "ID dell'ordine non corretto" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Nome Fornitore" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "L'ordine non può essere cancellato" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Consenti di chiudere l'ordine con elementi di riga incompleti" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "L'ordine ha elementi di riga incompleti" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "L'ordine non è aperto" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Prezzo Automatico" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Valuta prezzo d'acquisto" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Unisci elementi" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Codice articolo" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Numero Dell'articolo Interno" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Numero Articolo Interno" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "L'articolo del fornitore deve essere specificato" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "L'ordine di acquisto deve essere specificato" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Il fornitore deve essere abbinato all'ordine d'acquisto" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "L'ordine di acquisto deve essere abbinato al fornitore" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Elemento Riga" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Seleziona la posizione di destinazione per gli elementi ricevuti" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Inserisci il codice univoco per gli articoli in arrivo" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data di Scadenza" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "Inserisci la data di scadenza per gli articoli in arrivo" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Inserisci i numeri di serie per gli articoli stock in arrivo" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Sovrascrivi le informazioni d'imballaggio per gli articoli in arrivo" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Nota aggiuntiva per gli articoli in arrivo" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Codice a Barre" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Codice a barre scansionato" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Il codice a barre è già in uso" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Gli elementi di linea devono essere forniti" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "La destinazione deve essere specificata" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "I valori dei codici a barre forniti devono essere univoci" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Spedizioni" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Spedizioni Completate" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Valuta prezzo di vendita" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Elementi Assegnati" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Nessun dettaglio di spedizione fornito" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "L'elemento di riga non è associato a questo ordine" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "La quantità deve essere positiva" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Inserisci i numeri di serie da assegnare" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "La spedizione è già stata spedita" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "La spedizione non è associata con questo ordine" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Nessuna corrispondenza trovata per i seguenti numeri di serie" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "I seguenti numeri di serie non sono disponibili" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Articoli Linea Ordine Reso" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "L'elemento di riga non corrisponde all'ordine di reso" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "L'elemento di riga è già stato ricevuto" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Quantità da restituire" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Valuta del prezzo" @@ -5756,59 +5829,63 @@ msgstr "E' una revisione" msgid "Has Revisions" msgstr "Ha revisioni" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "BOM Valido" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "Categorie a Cascata" -#: part/api.py:963 +#: part/api.py:980 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:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filtra per categoria ID numerica o per la stringa 'null'" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "L'articolo assemblato è provabile" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Il componente è provabile" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Utilizzi" @@ -5821,7 +5898,7 @@ msgstr "Categoria Articoli" msgid "Part Categories" msgstr "Categorie Articolo" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Posizione Predefinita" @@ -5849,7 +5926,7 @@ msgstr "Parole chiave predefinite per gli articoli in questa categoria" msgid "Icon" msgstr "Icona" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Icona (facoltativa)" @@ -5870,984 +5947,1012 @@ msgstr "Valore Predefinito" msgid "Default Parameter Value" msgstr "Valore Parametro Predefinito" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Articoli" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Impossibile eliminare i parametri di una parte bloccata" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Impossibile modificare i parametri di una parte bloccata" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Impossibile eliminare questo articolo perché è bloccato" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Impossibile eliminare questo articolo perché è ancora attivo" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Non è possibile eliminare questo articolo in quanto è utilizzato in una costruzione" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "L'articolo '{self}' non può essere usata nel BOM per '{parent}' (ricorsivo)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "L'articolo '{parent}' è usato nel BOM per '{self}' (ricorsivo)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN deve corrispondere al modello regex {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "L'articolo non può essere una revisione di se stesso" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Le revisioni sono consentite solo per le parti di assemblaggio" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Non è possibile effettuare la revisione di un articolo modello" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "L'articolo genitore deve puntare allo stesso modello" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Esiste già un elemento stock con questo numero seriale" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Non è consentito duplicare IPN nelle impostazioni dell'articolo" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "La revisione dell'articolo duplicata esiste già." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Un articolo con questo Nome, IPN e Revisione esiste già." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Gli articoli non possono essere assegnati a categorie articolo principali!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Nome articolo" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "È Template" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Quest'articolo è un articolo di template?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Questa parte è una variante di un altro articolo?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variante Di" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Descrizione della parte (opzionale)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Parole Chiave" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Parole chiave per migliorare la visibilità nei risultati di ricerca" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Categoria articolo" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN - Numero di riferimento interno" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Numero di revisione o di versione" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revisione" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Questo articolo è una revisione di un altro articolo?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Revisione di" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Dove viene normalmente immagazzinato questo articolo?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Scadenza Predefinita" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Scorta Minima" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Livello minimo di giacenza consentito" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Unita di misura per questo articolo" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Questo articolo può essere costruito da altri articoli?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "Questo articolo può essere utilizzato per costruire altri articoli?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Questo articolo ha il tracciamento per gli elementi unici?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "Questo articolo può avere delle prove registrate?" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "Quest'articolo può essere acquistato da fornitori esterni?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Questo pezzo può essere venduto ai clienti?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Quest'articolo è attivo?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Gli articoli bloccati non possono essere modificati" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "BOM Convalidata" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "Il BOM per questa parte è valido?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Somma di controllo Distinta Base" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Somma di controllo immagazzinata Distinta Base" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Distinta Base controllata da" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Data di verifica Distinta Base" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Creazione Utente" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Utente responsabile di questo articolo" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Vendita multipla" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Valuta utilizzata per calcolare i prezzi" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Costo Minimo Distinta Base" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Costo minimo dei componenti dell'articolo" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Costo Massimo Distinta Base" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Costo massimo dei componenti dell'articolo" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Importo Acquisto Minimo" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Costo minimo di acquisto storico" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Importo massimo acquisto" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Costo massimo di acquisto storico" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Prezzo Interno Minimo" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Costo minimo basato su interruzioni di prezzo interne" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Prezzo Interno Massimo" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Costo massimo basato su interruzioni di prezzo interne" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Prezzo Minimo Fornitore" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Prezzo minimo articolo da fornitori esterni" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Prezzo Massimo Fornitore" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Prezzo massimo dell'articolo proveniente da fornitori esterni" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Variazione di costo minimo" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Costo minimo calcolato di variazione dell'articolo" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Massima variazione di costo" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Costo massimo calcolato di variazione dell'articolo" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Costo Minimo" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Sovrascrivi il costo minimo" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Costo Massimo" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Sovrascrivi il costo massimo" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Costo minimo totale calcolato" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Costo massimo totale calcolato" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Prezzo Di Vendita Minimo" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Prezzo minimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Prezzo Di Vendita Massimo" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Prezzo massimo di vendita basato sulle interruzioni di prezzo" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Prezzo storico minimo di vendita" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Costo Di Vendita Minimo" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Prezzo storico massimo di vendita" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Articolo per l'inventario" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Contatore Elemento" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Numero di scorte individuali al momento dell'inventario" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Totale delle scorte disponibili al momento dell'inventario" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Data" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Data in cui è stato effettuato l'inventario" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Costo Minimo Scorta" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Costo minimo stimato di magazzino a disposizione" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Costo Massimo Scorte" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Costo massimo stimato di magazzino a disposizione" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Aggiungi Prezzo Ribassato di Vendita dell'Articolo" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Modello Prove Articolo" -#: part/models.py:3655 +#: part/models.py:3665 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:3687 +#: part/models.py:3697 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:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Nome Test" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Inserisci un nome per la prova" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Chiave Di Prova" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Chiave semplificata per la prova" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Descrizione Di Prova" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Inserisci descrizione per questa prova" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Questo test è attivo?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Richiesto" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Questa prova è necessaria per passare?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Valore richiesto" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Allegato Richiesto" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Scelte valide per questo test (separate da virgole)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 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:3968 +#: part/models.py:4030 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:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Seleziona articolo principale" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Articolo subordinato" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Seleziona l'articolo da utilizzare nella Distinta Base" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Quantità Distinta Base per questo elemento Distinta Base" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Questo elemento della Distinta Base è opzionale" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "Imposta quantità" -#: part/models.py:4021 +#: part/models.py:4091 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:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "Logoramento" -#: part/models.py:4031 +#: part/models.py:4101 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:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "Arrotondamento Multiplo" -#: part/models.py:4044 +#: part/models.py:4114 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:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Riferimento Elemento Distinta Base" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Note Elemento Distinta Base" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Codice di controllo" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Codice di controllo Distinta Base" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Convalidato" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Questo articolo della distinta base è stato validato" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Viene Ereditato" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "La quantità deve essere un valore intero per gli articoli rintracciabili" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "L'articolo subordinato deve essere specificato" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Elemento Distinta Base Sostituito" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Elemento principale Distinta Base" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Sostituisci l'Articolo" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Articolo 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Articolo 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Seleziona Prodotto Relativo" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Nota per questa relazione" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "La relazione duplicata esiste già" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Categoria Superiore" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Categoria articolo principale" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Sottocategorie" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Risultati" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Numero di risultati registrati rispetto a questo modello" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Valuta di acquisto di questo articolo in stock" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "Il file non è un immagine" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Articolo Originale" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Seleziona l'articolo originale da duplicare" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Copia immagine" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Copia immagine dall'articolo originale" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Copia Distinta Base" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Copia fattura dei materiali dall'articolo originale" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Copia i dati dei parametri dall'articolo originale" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Copia note" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Copia note dall'articolo originale" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Copia Test" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "Copia modelli di test dall'articolo originale" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Quantità iniziale" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Ubicazione Iniziale Magazzino" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Specificare l'ubicazione iniziale del magazzino per questo Articolo" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Seleziona il fornitore (o lascia vuoto per saltare)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Seleziona il produttore (o lascia vuoto per saltare)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Codice articolo Produttore" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "L'azienda selezionata non è un fornitore valido" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "L'azienda selezionata non è un produttore valido" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "L'articolo del produttore che corrisponde a questo MPN esiste già" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "L'articolo del fornitore che corrisponde a questo SKU esiste già" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Nome Categoria" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "In Costruzione" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "Quantità di questo articolo attualmente in produzione" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Eccezionale quantità di questa parte prevista da costruire" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Articoli in magazzino" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Revisioni" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Giacenze Totali" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Scorte Non Assegnate" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Scorta Variante" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Duplica articolo" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Copia i dati iniziali da un altro Articolo" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Stock iniziale" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Crea Articolo con quantità di scorta iniziale" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Informazioni Fornitore" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Aggiungi le informazioni iniziali del fornitore per questo articolo" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Copia Parametri Categoria" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Copia i parametri dai modelli della categoria articolo selezionata" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Immagine esistente" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Nome del file di un'immagine articolo esistente" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Il file immagine non esiste" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Convalida l'intera Fattura dei Materiali" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Puoi produrre" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "Richiesto per gli Ordini di Produzione" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "Assegnato agli Ordini di Produzione" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "Richiesto per gli Ordini di Vendita" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "Assegnato agli Ordini di Vendita" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Prezzo Minimo" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Sovrascrivi valore calcolato per il prezzo minimo" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Valuta del prezzo minimo" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Prezzo Massimo" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Sovrascrivi valore calcolato per il prezzo massimo" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Valuta del prezzo massimo" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Aggiorna" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Aggiorna i prezzi per questo articolo" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "Il prezzo minimo non può essere maggiore del prezzo massimo" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "Il prezzo massimo non può essere minore del prezzo minimo" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Seleziona l'assemblaggio padre" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Seleziona la componente" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Seleziona l'articolo da cui copiare la distinta base" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Rimuovi Dati Esistenti" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Rimuovi elementi distinta base esistenti prima di copiare" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Includi Ereditato" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "Includi gli elementi Distinta Base ereditati da prodotti template" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Salta Righe Non Valide" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Abilita questa opzione per saltare le righe non valide" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Copia Articoli sostitutivi" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copia articoli sostitutivi quando duplichi gli elementi distinta base" @@ -7099,15 +7204,15 @@ msgstr "Quantità da assegnare" msgid "Label printing failed" msgstr "Stampa etichetta fallita" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Errore nel rendering dell'etichetta in PDF" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Errore nel rendering dell'etichetta in HTML" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Nessun elemento fornito da stampare" @@ -7168,7 +7273,7 @@ msgstr "Fornisce supporto nativo per codici a barre" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Modalità debug" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "Bordo" msgid "Print a border around each label" msgstr "Stampa un bordo intorno ad ogni etichetta" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Orizzontale" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "Allega al Modello su Stampa" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Salva l'output del report come allegato contro l'istanza del modello collegato durante la stampa" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Formato del nome file" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtri" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Larghezza [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Larghezza dell'etichetta, specificata in mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Altezza [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Larghezza dell'etichetta, specificata in mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Snippet" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Report file snippet" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Descrizione file snippet" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Risorsa" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Report file risorsa" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "File risorsa descrizione" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numero Seriale" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Ubicazione magazzino" @@ -8546,11 +8651,11 @@ msgstr "Ubicazione magazzino" msgid "Stock Locations" msgstr "Posizioni magazzino" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Proprietario" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Seleziona Owner" @@ -8558,7 +8663,7 @@ msgstr "Seleziona Owner" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Gli elementi di magazzino non possono essere direttamente situati in un magazzino strutturale, ma possono essere situati in ubicazioni secondarie." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Esterno" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "L'articolo deve essere specificato" -#: stock/models.py:911 +#: stock/models.py:924 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:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Non è possibile creare un elemento di magazzino per articoli virtuali" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "L'elemento non può appartenere a se stesso" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 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:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Elemento di magazzino principale" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Articolo base" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "Seleziona un fornitore articolo corrispondente per questo elemento di magazzino" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Dove si trova questo articolo di magazzino?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Imballaggio di questo articolo di magazzino è collocato in" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Installato In" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Questo elemento è stato installato su un altro elemento?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Numero di serie per questo elemento" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Codice lotto per questo elemento di magazzino" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Quantità disponibile" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Genera Costruzione" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Costruisci per questo elemento di magazzino" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Origina Ordine di Acquisto" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Ordine d'acquisto per questo articolo in magazzino" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Destinazione Ordine di Vendita" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Elimina al esaurimento" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Cancella questo Elemento di Magazzino quando la giacenza è esaurita" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Prezzo di acquisto unitario al momento dell’acquisto" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Convertito in articolo" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "L'articolo non è impostato come tracciabile" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "La quantità deve essere un numero intero" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "I numeri di serie devono essere forniti come elenco" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "La quantità non corrisponde ai numeri di serie" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 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:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "L'elemento di magazzino è installato in un altro elemento" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "L'elemento di magazzino contiene altri elementi" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "L'elemento di magazzino è stato assegnato a un cliente" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "L'elemento di magazzino è attualmente in produzione" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Il magazzino serializzato non può essere unito" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplica elementi di magazzino" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "Gli elementi di magazzino devono riferirsi allo stesso articolo fornitore" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "I codici di stato dello stock devono corrispondere" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "Le giacenze non possono essere spostate perché non disponibili" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Note d'ingresso" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Il valore deve essere fornito per questo test" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "L'allegato deve essere caricato per questo test" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Risultato Test" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Test valore output" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Risultato della prova allegato" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Note del test" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "Inserisci i numeri di serie per i nuovi elementi" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Scaduto" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "Revocato" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Impostazione autorizzazioni" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Visualizza" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Autorizzazione a visualizzare gli articoli" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Aggiungi" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Autorizzazione ad aggiungere elementi" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Modificare" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Permessi per modificare gli elementi" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Elimina" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Autorizzazione ad eliminare gli elementi" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "Bot" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Interno" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Ospite" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Lingua" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Lingua preferita dell'utente" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Tema" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Widgets" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Nome Visualizzato" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ja/LC_MESSAGES/django.po index abe106b0df..6dcbe5868d 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Japanese\n" "Language: ja_JP\n" @@ -89,6 +89,7 @@ msgstr "{original}を{unit}に変換できませんでした。" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "数量コードが無効です" @@ -104,11 +105,11 @@ msgstr "日付を入力する" msgid "Invalid decimal value" msgstr "無効な10進数値" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "接続エラー" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "サーバは無効なステータスコードで応答しました" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "例外が発生しました" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "サーバーが無効なContent-Length値で応答しました" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "画像サイズが大きすぎます" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "画像のダウンロードが最大サイズを超えました" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "リモートサーバーが空のレスポンスを返しました" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "指定されたURLは有効な画像ファイルではありません" @@ -219,7 +220,7 @@ msgstr "アプリにログイン" msgid "Email" msgstr "メールアドレス" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "二要素認証を有効にする必要があります。" @@ -263,124 +264,108 @@ msgstr "参照は必須パターンに一致する必要があります。" msgid "Reference number is too large" msgstr "参照番号が大きすぎる" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "無効な選択です" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "お名前" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "説明" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "説明 (オプション)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "パス" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "同じ親に重複した名前は存在しません。" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "マークダウンメモ (オプション)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "バーコード情報" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "サードパーティ製バーコードデータ" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "バーコードハッシュ" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "バーコードデータのユニークなハッシュ" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "既存のバーコードが見つかりました" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "サーバーエラー" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "サーバーによってエラーが記録されました。" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "有効な数字でなければなりません" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "通貨" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "利用可能なオプションから通貨を選択してください" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "この項目は空欄にできません。" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "無効な値です。" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "遠隔画像" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "外部画像ファイルのURL" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "外部URLからの画像ダウンロードは許可されていません" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "リモートURLからの画像ダウンロードに失敗しました" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "無効なコンテンツタイプ形式です" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "コンテンツタイプが見つかりません" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "コンテンツタイプが必須のミックスインクラスと一致しません" @@ -552,8 +537,8 @@ msgstr "無効な物理単位" msgid "Not a valid currency code" msgstr "有効な通貨コードではありません。" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "注文ステータス" @@ -561,21 +546,21 @@ msgstr "注文ステータス" msgid "Parent Build" msgstr "親ビルド" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "バリアントを含む" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "バリアントを含む" msgid "Part" msgstr "パーツ" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "カテゴリ" @@ -605,7 +590,7 @@ msgstr "カテゴリ" msgid "Ancestor Build" msgstr "祖先ビルド" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "担当" @@ -653,11 +638,11 @@ msgstr "完成前" msgid "Completed after" msgstr "終了後" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "最小日付" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "最大日付" @@ -669,16 +654,16 @@ msgstr "ツリーを除く" msgid "Build must be cancelled before it can be deleted" msgstr "削除するには、ビルドをキャンセルする必要があります。" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "消耗品" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "オプション" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "アセンブリ" @@ -687,32 +672,32 @@ msgstr "アセンブリ" msgid "Tracked" msgstr "追跡" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "テスト可能" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "受注残高" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "割り当てられた" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "消費されました" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "注文中" @@ -720,7 +705,7 @@ msgstr "注文中" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "組立注文" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "場所" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "出力" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "ビルド・オーダー・リファレンス" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "組立状況" msgid "Build status code" msgstr "ビルドステータスコード" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "バッチコード" @@ -870,8 +855,8 @@ msgstr "バッチコード" msgid "Batch code for this build output" msgstr "このビルド出力のバッチコード" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "作成日時" @@ -891,7 +876,7 @@ msgstr "完成目標日" msgid "Target date for build completion. Build will be overdue after this date." msgstr "ビルド完了目標日。この日付を過ぎると、ビルドは期限切れになります。" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "完了日" @@ -907,8 +892,8 @@ msgstr "発行者" msgid "User who issued this build order" msgstr "このビルドオーダーを発行したユーザー" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "責任" @@ -917,12 +902,12 @@ msgstr "責任" msgid "User or group responsible for this build order" msgstr "このビルドオーダーを担当するユーザーまたはグループ" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "外部リンク" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "外部 サイト へのリンク" @@ -934,8 +919,8 @@ msgstr "組立優先度" msgid "Priority of this build order" msgstr "建設順序の優先順位" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "プロジェクトコード" @@ -968,7 +953,7 @@ msgstr "建設発注が完了しました" msgid "Serial numbers must be provided for trackable parts" msgstr "追跡可能な部品については、シリアル番号の提示が必要です。" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "ビルド出力が指定されていません" @@ -980,47 +965,47 @@ msgstr "ビルド出力はすでに完了しています" msgid "Build output does not match Build Order" msgstr "ビルド出力がビルド順序と一致しません" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "数量はゼロより大きくなければなりません" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "数量が出力数量を上回ることはできません" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "ビルド出力は、必要なすべてのテストを通過していません" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "ビルド出力 {serial} は、必要なすべてのテストに合格していません。" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "割り当てられた項目を含むビルド出力の一部のみを完了することはできません" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "ビルドオーダーラインアイテム" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "ビルドオブジェクト" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "ビルドオブジェクト" msgid "Quantity" msgstr "数量" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "注文数量" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "消費された在庫の数量" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "ビルド項目は、ビルド出力を指定する必要があります。" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "選択された在庫品目が部品表に一致しません。" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "シリアル在庫の場合、数量は1でなければなりません。" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "割当数量({q})は在庫可能数量({a})を超えてはなりません。" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "在庫が過剰配分" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "在庫商品" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "ソース在庫品" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "建設に割り当てる在庫量" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "インストール" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "仕向け地在庫品" @@ -1099,7 +1084,7 @@ msgstr "仕向け地在庫品" msgid "Build Level" msgstr "ビルドレベル" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "部品名" @@ -1135,7 +1120,7 @@ msgstr "追跡可能な部品に必要な整数個数" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "部品表には追跡可能な部品が含まれるため、必要な数量は整数" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "シリアル番号" @@ -1156,8 +1141,8 @@ msgstr "シリアル番号の自動割り当て" msgid "Automatically allocate required items with matching serial numbers" msgstr "シリアル番号が一致する必要なアイテムを自動的に割り当て" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "以下のシリアル番号は既に存在するか、無効です。" @@ -1245,7 +1230,7 @@ msgstr "在庫アイテムがこのビルド・オーダーに完全に割り当 msgid "Required stock has not been fully allocated" msgstr "必要在庫の配分が完了していません" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "インコンプリートの受け入れ" @@ -1293,7 +1278,7 @@ msgstr "bom_item.partは、ビルドオーダーと同じパーツを指す必 msgid "Item must be in stock" msgstr "在庫があること" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "使用可能数量({q})を超過" @@ -1306,7 +1291,7 @@ msgstr "追跡部品の割り当てには、ビルド出力を指定する必要 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "追跡されていない部品の割り当てでは、ビルド出力を指定できません。" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "割り当て項目の提供" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "ビルド" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "サプライヤー" @@ -1404,7 +1389,7 @@ msgstr "ビルドリファレンス" msgid "Part Category Name" msgstr "部品分類名" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "追跡可能" @@ -1412,29 +1397,29 @@ msgstr "追跡可能" msgid "Inherited" msgstr "継承" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "バリアントを許可" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "BOMアイテム" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "生産中" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "ビルド予定" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "外部在庫" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "在庫状況" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "ユーザーにはこれらの添付ファイルを削除する権限がありません。" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "ユーザーにはこの添付ファイルを削除する権限がありません" @@ -1554,610 +1543,634 @@ msgstr "プラグインなし" msgid "Project Code Label" msgstr "プロジェクトコードラベル" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "更新しました" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "最終更新のタイムスタンプ" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "更新者:" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "このオブジェクトを最後に更新したユーザー" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "独自のプロジェクトコード" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "プロジェクトの説明" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "このプロジェクトを担当するユーザーまたはグループ" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "設定キー" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "設定値" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "選択された値は有効なオプションではありません。" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "値はブール値でなければなりません。" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "値は整数値でなければなりません。" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "値は有効な数値でなければなりません。" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "値がバリデーション・チェックに合格しない" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "キー文字列は一意でなければなりません。" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "ユーザー" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "価格破壊数量" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "価格" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "指定数量での単価" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "エンドポイント" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "このウェブフックを受信するエンドポイント" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "このウェブフックの名前" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "有効" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "このウェブフックはアクティブですか" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "トークン" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "アクセス用トークン" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "シークレット" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "HMACの共有秘密" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "メッセージ ID:" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "このメッセージの一意な識別子" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "ホスト" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "このメッセージを受信したホスト" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "ヘッダー" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "このメッセージのヘッダー" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "本文" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "メッセージ本文" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "このメッセージを受信したエンドポイント" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "作業内容" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "このメッセージに関する作業は終わったのですか?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "タイトル" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "リンク" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "公開済み" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "投稿者" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "概要" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "既読" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "このニュースは読まれましたか?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "画像ファイル" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "この画像の対象モデルタイプ" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "この画像の対象モデルID" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "カスタムユニット" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "単位記号は一意でなければなりません。" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "ユニット名は有効な識別子でなければなりません。" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "ユニット名" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "シンボル" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "オプションの単位記号" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "定義" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "ユニットの定義" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "添付ファイル" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "ファイルがありません" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "外部リンクが見つかりません。" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "モデルタイプ" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "画像の対象モデルタイプ" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "添付ファイルを選択" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "コメント:" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "添付コメント" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "アップロード日" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "ファイルがアップロードされた日付" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "ファイルサイズ" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "ファイルサイズ(バイト" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "添付ファイルに指定されたモデルタイプが無効です" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "カスタムステート" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "カスタムステート" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "リファレンス・ステータス・セット" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "このカスタム状態で拡張されたステータスセット" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "論理キー" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "ビジネスロジックでこのカスタムステートに等しいステート論理キー" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "値" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "モデルのデータベースに保存される数値" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "都道府県名" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "ラベル" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "フロントエンドに表示されるラベル" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "色" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "フロントエンドに表示される色" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "モデル" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "この状態が関連するモデル" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "モデルを選択する必要があります" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "キーを選択する必要があります。" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "論理キーを選択する必要があります。" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "キーは論理キーと異なる必要があります。" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "有効な参照ステータスクラスが提供されなければならない" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "キーは、参照ステータスの論理キーとは異なる必要があります。" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "論理キーは、参照ステータスの論理キーに含まれていなければなりません。" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "リファレンス・ステータスの名前とは異なっていなければならない。" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "セレクションリスト" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "セレクション・リスト" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "選択リストの名前" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "選択リストの説明" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "ロック中" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "この選択リストはロックされていますか?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "このセレクションリストは使えますか?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "ソースプラグイン" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "選択リストを提供するプラグイン" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "ソースストリング" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "このリストに使用されているソースを示すオプションの文字列" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "デフォルトエントリー" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "この選択リストのデフォルト項目" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "作成日" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "選択リストが作成された日時" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "最終更新" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "選択リストが最後に更新された日時" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "セレクションリスト入力" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "セレクションリスト" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "このエントリーが属する選択リスト" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "選択リストエントリーの値" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "選択リスト項目のラベル" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "選択リスト項目の説明" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "この選択リストはアクティブですか?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "パラメータテンプレート" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "パラメータテンプレート" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "チェックボックスのパラメータに単位を指定することはできません。" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "チェックボックスパラメータに選択肢を持たせることはできません。" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "選択肢はユニークでなければなりません" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "パラメータ・テンプレート名は一意でなければなりません。" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "このパラメータテンプレートにおける対象モデルタイプ" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "パラメータ名" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "単位" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "このパラメータの物理単位" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "パラメータの説明" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "チェックボックス" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "このパラメータはチェックボックスですか?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "選択肢" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "このパラメータの有効な選択肢(カンマ区切り)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "このパラメータの選択リスト" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "有効" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "このパラメータテンプレートは有効ですか?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "パラメータ" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "パラメータ" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "パラメータ値の選択が無効" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "パラメータに対して無効なモデルタイプが指定されています" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "モデルID" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "このパラメータの対象となるモデルのID" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "テンプレート" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "パラメータテンプレート" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "データ" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "パラメータ値" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "パラメータ値" msgid "Note" msgstr "備考" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "任意のメモ欄" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "バーコードスキャン" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "バーコードデータ" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "バーコードをスキャンしたユーザー" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "タイムスタンプ" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "バーコードスキャンの日時" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "バーコードを処理したURLエンドポイント" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "コンテキスト" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "バーコードスキャンのコンテキストデータ" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "返答" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "バーコードスキャンによるレスポンスデータ" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "結果" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "バーコードスキャンは成功しましたか?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "エラーが発生しました" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "メールメッセージ" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "メールメッセージ" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "発表されました" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "送信" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "失敗" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "配送済み" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "確認済み" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "インバウンド" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "アウトバウンド" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "返信なし" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "配送状況を記録" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "読み取りを記録" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "クリックを記録" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "グローバルID" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "このメッセージの識別子(外部システムから提供される場合があります)" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "スレッドID" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "このメッセージスレッドの識別子(外部システムから提供される場合があります)" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "スレッド" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "このメッセージに関連するスレッド" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "優先順位" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "メールのスレッド" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "メールのスレッド" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "キー" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "このスレッドの固有キー(スレッドを識別するために使用されます)" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "このスレッドの固有識別子" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "内部を開始しました" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "このスレッドは内部で開始されたものですか?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "スレッドが作成された日時" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "スレッドが最後に更新された日時" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "受領品目" @@ -2457,7 +2470,7 @@ msgstr "ファイル名" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "モデルタイプ" @@ -2601,13 +2614,13 @@ msgstr "通貨の更新間隔" msgid "How often to update exchange rates (set to zero to disable)" msgstr "為替レートの更新頻度 (ゼロに設定すると無効になります)" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "日" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "通貨更新プラグイン" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "URLからダウンロード" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "外部URLからの画像ダウンロードを許可する" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "ダウンロードサイズ制限" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "外部URL画像の最大サイズ" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "URLからのダウンロードに使用されるユーザーエージェント" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "厳格なURLバリデーション" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "URL検証時にスキーマ指定を要求" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "更新チェック間隔" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "アップデートをチェックする頻度 (ゼロに設定すると無効になります)" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "自動バックアップ" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "データベースとメディアファイルの自動バックアップ" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "自動バックアップ間隔" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "自動バックアップイベント間の日数を指定" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "タスク削除間隔" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "バックグラウンドタスクの結果は、指定した日数後に削除されます。" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "エラーログ削除間隔" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "エラーログは指定した日数後に削除されます。" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "通知削除間隔" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "ユーザー通知は指定された日数後に削除されます。" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "メール削除間隔" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "メールメッセージは、指定された日数が経過後に削除されます。" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "メールログの保護" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "メールログエントリの削除を防止します" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "バーコードサポート" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "ウェブインターフェイスでバーコードスキャナのサポートを有効にします。" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "店舗バーコード結果" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "バーコードスキャン結果をデータベースに保存" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "バーコードスキャン最大カウント" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "バーコードスキャン結果の最大保存数" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "バーコード入力遅延" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "バーコード入力処理遅延時間" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "バーコードウェブカメラサポート" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "ブラウザのウェブカメラでバーコードのスキャンが可能" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "バーコード表示データ" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "バーコードデータをテキストとしてブラウザに表示" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "バーコード生成プラグイン" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "内部バーコードデータ生成に使用するプラグイン" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "部品改訂" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "パートのリビジョンフィールドを有効にします。" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "アセンブリ改訂のみ" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "組立部品のみ修正可能" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "アセンブリからの削除を許可" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "アセンブリで使用されている部品の削除を許可します。" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN 正規表現" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "部分IPNにマッチする正規表現パターン" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "IPNの重複を許可" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "複数のパートが同じIPNを共有できるようにします。" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "IPNの編集を許可" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "部品編集中にIPN値の変更を許可" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "部品表データのコピー" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "部品複製時にBOMデータをデフォルトでコピー" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "部品パラメータデータのコピー" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "部品複製時にデフォルトでパラメータデータをコピー" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "コピー部品テストデータ" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "部品複製時にテストデータをデフォルトでコピー" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "カテゴリー・パラメーター・テンプレートのコピー" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "部品作成時のカテゴリー・パラメーター・テンプレートのコピー" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "パーツはデフォルトのテンプレートです" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "パーツはデフォルトで他のコンポーネントから組み立てることができます" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "コンポーネント" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "パーツはデフォルトでサブコンポーネントとして使用できます" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "購入可能" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "パーツはデフォルトで購入可能です" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "販売可能" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "パーツはデフォルトで販売可能です" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "パーツはデフォルトで追跡可能です" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "バーチャル" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "パーツはデフォルトでバーチャル" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "関連部品を表示" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "部品の関連部品を表示" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "初期在庫データ" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "新規部品追加時に初期在庫を作成可能" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "サプライヤー初期データ" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "新しい部品を追加する際に、最初のサプライヤーデータを作成できるようにします。" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "部品名表示形式" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "部品名の表示形式" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "パーツカテゴリー デフォルトアイコン" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "パートカテゴリのデフォルトアイコン(空はアイコンがないことを意味します)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "価格の最小桁数" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "価格データのレンダリング時に表示する最小小数点以下の桁数" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "価格の小数点以下の桁数" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "価格データのレンダリング時に表示する小数点以下の桁数の最大値" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "サプライヤー価格の利用" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "全体的な価格計算にサプライヤーの価格破壊を含めること" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "購入履歴の上書き" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "過去の発注価格がサプライヤーの価格変動を上書き" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "ストックアイテム価格を使用" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "手動入力された在庫データから価格計算を行います。" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "在庫商品の価格設定年齢" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "この日数より古い在庫品を価格計算から除外します。" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "バリアント価格を使用" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "全体的な価格計算にバリアント価格を含む" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "アクティブバリアントのみ" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "バリアント価格の計算には、アクティブなバリアントパーツのみを使用します。" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "自動更新の価格設定" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "内部データが変更された際に、部品価格を自動的に更新します。" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "価格の再構築間隔" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "部品価格が自動的に更新されるまでの日数" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "社内価格" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "部品の内部価格の有効化" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "内部価格オーバーライド" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "利用可能な場合、内部価格は価格帯の計算より優先されます。" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "ラベル印刷の有効化" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "ウェブインターフェースからラベル印刷を有効にします。" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "ラベル画像DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "ラベル印刷プラグインに供給する画像ファイルを生成する際のDPI解像度" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "レポートの有効化" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "レポートの作成" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "デバッグモード" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "デバッグモードでのレポート生成(HTML出力)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "ログレポートエラー" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "レポート生成時に発生するエラーのログ" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "ページサイズ" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "PDFレポートのデフォルトのページサイズ" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "パラメータ単位の強制" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "単位が指定されている場合、パラメータ値は指定された単位に一致する必要があります。" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "世界的にユニークな連載" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "在庫品のシリアル番号はグローバルに一意でなければなりません。" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "枯渇在庫の削除" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "ストックアイテムが枯渇した場合のデフォルトの動作を決定します。" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "バッチコードテンプレート" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "ストックアイテムのデフォルトバッチコード生成用テンプレート" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "有効期限" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "在庫期限切れ機能の有効化" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "期限切れ株式の売却" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "期限切れ株式の売却を許可" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "在庫切れ時間" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "在庫品が期限切れとみなされるまでの日数" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "賞味期限切れ在庫の処理" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "期限切れの在庫を使用した建物の建築を許可" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "株式所有権" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "ストックロケーションとアイテムの所有権管理" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "在庫場所 デフォルトアイコン" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "在庫場所のデフォルトアイコン(空はアイコンがないことを意味します。)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "インストール済みストックアイテムの表示" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "ストックテーブルにインストールされたストックアイテムを表示" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "アイテム取り付けの際はBOMをチェック" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "親部品のBOMには、インストールされたストックアイテムが存在する必要があります。" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "在庫切れの転送を許可" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "在庫のないストックアイテムをストックロケーション間で移動可能" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "ビルド・オーダー参照パターン" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "Build Order参照フィールドの生成に必要なパターン" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "責任ある所有者を要求" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "各注文には、責任ある所有者を指定する必要があります。" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "アクティブパートが必要" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "非稼動部品の製造オーダー作成を防止" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "ロックされた部分を要求" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "ロックされていない部品の製造オーダー作成を防止" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "有効なBOMが必要" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "BOMが検証されない限り、製造オーダーが作成されないようにします。" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "クローズド・チャイルド・オーダー" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "すべてのチャイルドオーダーが終了するまで、ビルドオーダーの完了を防止します。" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "外部ビルドオーダー" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "外部ビルドオーダー機能の有効化" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "テストがパスするまでブロック" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "出荷済みと表示された販売注文は、「出荷済み」ステータスを回避して自動的に完了します。" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "発注書参照パターン" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "発注書参照フィールドの生成に必要なパターン" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "完了した発注書の編集" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "出荷後または完了後の発注書の編集が可能" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "通貨の変換" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "在庫を受け取る際、商品価値を基準通貨に変換" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "自動発注" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "すべての品目を受領した時点で、発注書を完了として自動的にマーク" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "パスワード忘れ" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "ログインページでのパスワード忘れ防止機能の有効化" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "登録の有効化" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "ログインページでユーザーの自己登録を可能にします。" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "SSOの有効化" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "ログインページでSSOを有効化" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "SSO登録の有効化" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "ログインページでSSOによるユーザーの自己登録を可能にします。" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "SSOグループ同期の有効化" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "InvenTreeグループとIdPが提供するグループの同期を有効にします。" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSOグループキー" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "IdP が提供する groups claim 属性の名前。" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "SSOグループマップ" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "SSO外のグループを削除" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "メールアドレスは必須です" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "サインアップ時にメールの入力を要求" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "SSOユーザーの自動入力" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "SSOアカウントデータからユーザー詳細を自動入力" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "メール2回" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "サインアップの際、ユーザーに2度メールを尋ねます。" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "パスワード2回" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "サインアップ時にパスワードを2回要求" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "許可ドメイン" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "特定のドメイン(@で始まるカンマ区切り)へのサインアップを制限します。" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "登録時のグループ" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "MFAの実施" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "ユーザーは多要素セキュリティを使用する必要があります。" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "起動時にプラグインをチェック" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "起動時にすべてのプラグインがインストールされていることを確認 - コンテナ環境では有効にします。" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "プラグインのアップデートの確認" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "インストールされているプラグインのアップデートを定期的にチェックします。" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "URL統合の有効化" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "プラグインがURLルートを追加できるようにします" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "ナビゲーション統合の有効化" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "プラグインをナビゲーションに統合可能" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "アプリとの統合" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "プラグインを有効にしてアプリを追加" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "スケジュール統合の有効化" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "スケジュールタスクを実行するプラグインの有効化" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "イベント統合の有効化" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "プラグインが内部イベントに応答できるようにします。" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "インターフェース統合の有効化" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "プラグインがユーザー・インターフェースに統合できるようにします。" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "メール連携を有効にする" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "プラグインを有効にして、送信/受信メールを処理できるようにします" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "プロジェクトコードの有効化" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "プロジェクトを追跡するためのプロジェクトコードの有効化" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "過去の在庫数量および価値を記録する機能を有効にします" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "外部ロケーションを除く" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "自動引取期間" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "ユーザーのフルネームを表示" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "ユーザー名の代わりにフルネームを表示" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "ユーザープロファイルの表示" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "プロフィールページにユーザーのプロフィールを表示" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "テストステーションデータの有効化" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "テスト結果のテストステーションデータ収集の有効化" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "マシン ping を有効にする" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "登録されたマシンの状態を確認するため、定期的なpingタスクを有効にしてください" @@ -3951,6 +4008,14 @@ msgstr "最後の中古印刷機" msgid "Save the last used printing machines for a user" msgstr "ユーザーの最後に使用した印刷機を保存" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "全モデル" @@ -4012,8 +4077,8 @@ msgstr "内部はアクティブ" msgid "Supplier is Active" msgstr "サプライヤーの活動" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "製造元" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "連絡先メールアドレス" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "お問い合わせ" @@ -4111,7 +4176,7 @@ msgstr "納税者番号" msgid "Company Tax ID" msgstr "法人税番号" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "住所" @@ -4203,12 +4268,12 @@ msgstr "社内用出荷注意事項" msgid "Link to address information (external)" msgstr "住所情報へのリンク(外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "メーカー・パーツ" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "ベース部" @@ -4221,8 +4286,8 @@ msgstr "部品を選択" msgid "Select manufacturer" msgstr "メーカー選択" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN" @@ -4250,8 +4315,8 @@ msgstr "パック単位はゼロより大きくなければなりません。" msgid "Linked manufacturer part must reference the same base part" msgstr "リンクされたメーカー部品は、同じベース部品を参照する必要があります。" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "仕入先" msgid "Select supplier" msgstr "サプライヤーを選択" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "サプライヤー在庫管理ユニット" @@ -4290,15 +4355,15 @@ msgstr "外部サプライヤー部品リンク用URL" msgid "Supplier part description" msgstr "サプライヤーの部品説明" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "基本料金" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "ミニマムチャージ(例:仕入れ手数料)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "パッケージング" @@ -4315,7 +4380,7 @@ msgstr "パック数量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "1パックに供給される総量。単品の場合は空のままにしてください。" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "複数" @@ -4339,23 +4404,23 @@ msgstr "アベイラビリティ・データの最終更新日" msgid "Supplier Price Break" msgstr "サプライヤーの価格破壊" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "このサプライヤーで使用されるデフォルト通貨" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "会社名" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "在庫あり" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "価格割り引き" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "元の行データ" msgid "Errors" msgstr "エラー" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "有効" @@ -4623,7 +4688,7 @@ msgstr "各ラベルの印刷部数" msgid "Connected" msgstr "接続済み" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "不明" @@ -4727,7 +4792,7 @@ msgstr "プロパティーキー" msgid "Value of the property" msgstr "プロパティー値" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "グループ" @@ -4751,117 +4816,117 @@ msgstr "最大進捗" msgid "Maximum value for progress type, required if type=progress" msgstr "進行状況タイプの場合の最大値。type=progress の場合に必須です。" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "注文参照" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "並外れた" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "プロジェクトコード" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "作成者" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "作成前" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "の後に作成されました。" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "開始日あり" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "開始日 前" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "開始日 後" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "目標期日あり" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "目標期日" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "以降の目標日" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "価格" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "完成前" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "終了後" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "外部ビルドオーダー" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "注文" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "注文完了" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "内部パーツ" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "注文保留" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "完了" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "出荷あり" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "注文" msgid "Sales Order" msgstr "セールスオーダー" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "合計金額" msgid "Total price for this order" msgstr "この注文の合計金額" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "注文通貨" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "この注文の通貨(会社のデフォルトを使用する場合は空白のままにしてください。)" @@ -4914,11 +4979,11 @@ msgstr "指定の会社と住所が一致しません" msgid "Order description (optional)" msgstr "ご注文内容(任意)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "この注文のプロジェクトコードを選択してください。" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "外部ページへのリンク" @@ -4930,7 +4995,7 @@ msgstr "開始日" msgid "Scheduled start date for this order" msgstr "本注文の開始予定日" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "終了日に達したら" @@ -4963,12 +5028,12 @@ msgstr "本注文に関する連絡先" msgid "Company address for this order" msgstr "本注文の会社住所" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "注文参照" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "ステータス" @@ -4992,15 +5057,15 @@ msgstr "サプライヤー注文参照コード" msgid "received by" msgstr "受信" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "注文完了日" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "目的地" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "入荷商品のお届け先" @@ -5024,616 +5089,624 @@ msgstr "数量は正の数でなければなりません。" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "顧客" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "販売先" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "販売注文状況" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "お客様リファレンス" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "顧客注文参照コード" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "出荷日" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "出荷元" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "注文はすでに完了しています。" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "注文はすでにキャンセルされました" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "未完了の注文にのみ完了マークを付けることができます。" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "出荷に不備があるため、注文を完了できません。" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "割り当てに不備があるため、注文を完了できません。" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "不完全な項目があるため、注文を完了できません。" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "注文はロックされ、変更できません。" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "品目数量" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "行項目参照" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "項目" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "この行項目の目標期日(注文の目標期日を使用する場合は空白のままにしてください。)" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "行項目の説明(オプション)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "この行の補足説明" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "単価" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "発注書項目" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "サプライヤーの部品はサプライヤーと一致しなければなりません。" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "ビルドオーダーは外部としてマークする必要があります" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "ビルドオーダーはアセンブリ部品にのみリンクできます" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "ビルドオーダーの部品は、ラインアイテムの部品と一致する必要があります。" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "サプライヤー" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "受信" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "受領品目数" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "購入金額" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "購入単価" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "本品目により完成する外部ビルドオーダー" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "発注書追加行" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "販売注文明細" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "販売可能な部品のみを販売オーダーに割り当てることができます。" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "セール価格" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "販売単価" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "発送済み" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "出荷数量" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "販売注文の出荷" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "配送先住所はお客様と一致している必要があります" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "こちらの発送先住所" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "出荷日" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "配達日" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "貨物の引渡日" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "チェック済み" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "この貨物をチェックしたユーザー" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "発送" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "出荷番号" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "追跡番号" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "貨物追跡情報" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "請求書番号" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "関連する請求書の参照番号" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "発送済み" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "出荷品目に割り当てられた在庫がありません" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "出荷は完了前に必ず確認が必要となります" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "セールスオーダー追加ライン" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "販売注文の割り当て" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "在庫アイテムが割り当てられていません" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "在庫品を別部品のラインに割り当てることはできません。" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "部品のないラインに在庫を割り当てることはできません。" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "割当数量が在庫数量を超えることはできません" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "割当数量はゼロより大きくなければなりません" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "シリアル化された在庫品の場合、数量は1でなければなりません。" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "販売注文と出荷が一致しません" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "出荷が販売注文と一致しません" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "ライン" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "販売注文の出荷参照" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "アイテム" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "割り当てるストックアイテムを選択" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "在庫割当数量の入力" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "リターンオーダー参照" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "返品元の会社" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "返品状況" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "返品注文項目" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "在庫品の指定が必要です。" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "返品数量が在庫数量を超える場合" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "返品数量はゼロより大きくなければなりません。" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "シリアル化されたストックアイテムの数量が無効です。" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "お客様から返品する商品を選択" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "受領日" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "転帰" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "この項目の成果" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "この品目の返品または修理に関連する費用" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "リターンオーダー追加ライン" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "注文ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "複製する注文のID" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "コピーライン" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "元の注文から行項目をコピー" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "余分な行をコピー" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "元の注文から余分な項目をコピー" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "コピーパラメータ" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "完成路線" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "重複した注文" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "この注文を複製するためのオプションを指定します。" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "無効なオーダーID" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "サプライヤー名" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "ご注文のキャンセルはできません。" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "未完了の行項目で注文を閉じることができます。" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "注文に不備がある場合" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "ご注文は受け付けておりません。" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "自動車価格" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "サプライヤーの部品データに基づいて購入価格を自動計算" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "購入価格通貨" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "アイテムのマージ" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "同じ品目、同じ仕向け地、同じ日付の品目を1つの品目に統合します。" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "内部部品番号" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "内部部品名" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "サプライヤー部品の指定が必要" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "注文書の指定が必要" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "サプライヤーは発注書と一致しなければなりません。" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "発注書はサプライヤーと一致している必要があります。" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "明細" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "受取商品の配送先選択" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "入荷在庫品のバッチコード入力" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有効期限" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "入荷在庫の有効期限の入力" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "入荷した在庫品のシリアル番号の入力" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "入荷在庫品の包装情報の上書き" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "在庫品の入荷に関する注意事項" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "バーコード" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "スキャンされたバーコード" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "バーコードはすでに使用されています" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "項目は必ずご記入ください。" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "デスティネーション・ロケーションを指定する必要があります。" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "バーコードの値は一意でなければなりません。" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "発送" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "完了した出荷" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "販売価格通貨" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "割当項目" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "出荷の詳細は記載されていません" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "ラインアイテムは、この注文に関連付けられていません。" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "数量は正数でなければなりません。" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "割り当てるシリアル番号を入力" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "出荷済み" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "この注文には出荷が関連付けられていません" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "以下のシリアル番号に該当するものは見つかりませんでした。" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "以下のシリアル番号はご利用いただけません。" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "返品注文項目" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "ラインアイテムが返品オーダーと一致しません" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "ラインアイテムはすでに受領済み" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "商品の受け取りは、進行中の注文に対してのみ可能です。" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "返品数量" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "ライン価格通貨" @@ -5756,59 +5829,63 @@ msgstr "改訂版" msgid "Has Revisions" msgstr "改定あり" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "BOM有効" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "カスケードカテゴリ" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "もし該当する場合には、指定されたカテゴリの子カテゴリ内のアイテムを含めてください。" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "数値カテゴリIDまたはリテラル'null'でフィルタリングしてください" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "組み立て部分はテスト可能" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "コンポーネント部分はテスト可能" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "用途" @@ -5821,7 +5898,7 @@ msgstr "パーツカテゴリ" msgid "Part Categories" msgstr "パーツカテゴリ" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "デフォルトの場所" @@ -5849,7 +5926,7 @@ msgstr "このカテゴリの部品のデフォルトキーワード" msgid "Icon" msgstr "アイコン" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "アイコン (オプション)" @@ -5870,984 +5947,1012 @@ msgstr "初期値" msgid "Default Parameter Value" msgstr "パラメータのデフォルト値" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "パーツ" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "ロックされた部品のパラメータは削除できません" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "ロックされた部品のパラメータを変更することはできません" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "この部分はロックされているため削除できません" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "このパートはまだアクティブなので削除できません。" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "この部品はアセンブリで使用されているため、削除できません。" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "パート'{self}'は'{parent}'(再帰的)のBOMでは使用できません。" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "パート'{parent}'は'{self}'のBOMで使用(再帰的)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPNは正規表現パターン{pattern}に一致しなければなりません。" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "パートはそれ自体の改訂にはなりえません" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "修正が許されるのは組立部品のみ" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "テンプレート部品のリビジョンを作成できません" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "親部品は同じテンプレートを指す必要があります。" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "このシリアル番号の在庫品はすでに存在します" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "パート設定でIPNの重複が許可されていません。" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "重複する部品リビジョンが既に存在します。" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "この名前、IPN、リビジョンを持つ部品は既に存在します。" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "部品を構造部品のカテゴリーに割り当てることはできません!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "部品名" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "テンプレート" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "この部品はテンプレート部品ですか?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "この部品は他の部品の変形ですか?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "変種" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "部品の説明(オプション)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "キーワード" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "検索結果での視認性を向上させる部分キーワード" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "パーツカテゴリ" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "部品のリビジョンまたはバージョン番号" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "リビジョン" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "この部品は他の部品の改訂版ですか?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "改訂版" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "この商品は通常どこに保管されていますか?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "デフォルトの有効期限" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "この部品の在庫品の有効期限(日単位" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "最小在庫" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "最低許容在庫量" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "この部品の単位" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "この部品は他の部品から作ることができますか?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "この部品を使って他の部品を作ることはできますか?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "このパーツはユニークなアイテムの追跡が可能ですか?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "この部品にテスト結果を記録することはできますか?" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "この部品は外部のサプライヤーから購入できますか?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "この部品は顧客に販売できますか?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "この部分はアクティブですか?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "ロックされた部分は編集できません" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "これは、ソフトウェア製品やライセンスなどの仮想部品ですか?" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "部品表の検証が完了しました" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "こちらの部品の部品表(BOM)は有効でしょうか?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "BOMチェックサム" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "保存されたBOMのチェックサム" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "BOMチェック済み" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "BOMチェック日" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "作成ユーザー" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "この部分の責任者" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "複数販売" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "価格計算のキャッシュに使用される通貨" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "最小BOMコスト" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "構成部品の最低コスト" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "最大BOMコスト" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "構成部品の最大コスト" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "最低購入価格" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "過去の最低購入価額" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "最大購入費用" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "過去の最高購入価格" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "最低社内価格" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最低コスト" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "社内最高価格" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "社内価格ブレークに基づく最大コスト" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "最低供給価格" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最低価格" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "サプライヤー最高価格" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "外部サプライヤーからの部品の最高価格" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "最小バリアントコスト" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "バリアントパーツの最小コストの計算" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "最大バリアントコスト" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "バリアント部品の最大コストの計算" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "最低料金" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "最低コストのオーバーライド" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "最大コスト" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "最大コストのオーバーライド" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "総合的な最小コストの計算" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "総合最大コストの計算" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "最低販売価格" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "価格破壊に基づく最低販売価格" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "最高販売価格" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "価格破壊に基づく最高販売価格" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "最低販売価格" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "過去の最低売却価格" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "最大販売価格" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "過去の最高売却価格" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "ストックテイク用部品" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "個数" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "棚卸時の個別在庫数" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "ストックテイク時の在庫可能量" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "日付" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "ストックテイク実施日" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "最低在庫コスト" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "手元在庫の最低見積原価" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "最大在庫コスト" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "手元在庫の最大見積原価" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "パーツセール価格" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "部品試験テンプレート" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "無効なテンプレート名 - 英数字を1文字以上含む必要があります。" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "テストテンプレートは、テスト可能な部分に対してのみ作成できます。" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "同じキーを持つテスト・テンプレートがパートに既に存在します。" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "試験名" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "テストの名前を入力します。" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "テストキー" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "テストの簡易キー" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "試験内容" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "このテストの説明を入力してください。" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "このテストは有効ですか?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "必須" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "このテストは合格するために必要ですか?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "価値が必要" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "このテストは、テスト結果を追加する際に値を必要としますか?" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "アタッチメントが必要" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "この試験では、試験結果を追加する際にファイルの添付が必要ですか。" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "このテストで有効な選択肢(カンマ区切り)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOMアイテムは変更できません - アセンブリがロックされています。" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM アイテムは変更できません - バリアントアセンブリがロックされています。" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "親部品を選択" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "サブパート" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "BOMで使用する部品を選択" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "このBOMアイテムのBOM数量" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "この部品表はオプションです。" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "このBOMアイテムは消耗品です。" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "設定数量" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "ビルドに必要な追加の必要量(セットアップ時の損失を考慮した分)" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "歩留まり損失" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "ビルドにおける推定歩留まり率(0~100%で表されます)" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "丸め倍数" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "必要な生産数量を、この値の倍数に切り上げてください。" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "BOMアイテムリファレンス" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "BOMアイテムノート" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "チェックサムi" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "BOMラインのチェックサム" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "検証済み" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "このBOMアイテムは検証済みです" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "継承" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "この BOM アイテムは、バリアントパーツの BOM に継承されます。" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "このBOMアイテムには、バリアントパーツのストックアイテムを使用できます。" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "数量は追跡可能な部品の場合、整数値でなければなりません。" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "サブパーツの指定が必要" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "BOMアイテム代替" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "代用部品はマスター部品と同じにすることはできません。" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "親BOMアイテム" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "代用部品" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "パート #1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "パート #2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "関連部品を選択" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "この関係について" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "部品とそれ自身との間に部品関係を作ることはできません。" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "重複する関係が既に存在します。" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "親カテゴリ" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "親部品カテゴリー" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "サブカテゴリ" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "結果" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "このテンプレートに対して記録された結果の数" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "この在庫商品の購入通貨" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "ファイルが画像ではありません" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "オリジナルパート" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "複製する元の部品を選択" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "コピー画像" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "元の部分から画像をコピー" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "コピーBOM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "元の部品から部品表をコピー" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "元の部品からパラメータデータをコピー" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "コピーノート" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "元のパートからメモをコピー" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "コピーテスト" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "元の部品からテスト用テンプレートをコピーしてください" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "初期在庫量" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "この部品の初期在庫数量を指定します。数量が0の場合、在庫は追加されません。" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "初期在庫場所" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "この部品の初期在庫場所を指定してください。" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "サプライヤーを選択してください。" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "メーカーを選択してください。" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "メーカー品番" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "選択された企業は有効なサプライヤーではありません。" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "選択された会社は有効な製造業者ではありません。" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "このMPNに一致するメーカー部品はすでに存在します。" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "このSKUに一致するサプライヤー部品は既に存在します。" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "カテゴリ名" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "建物" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "現在生産中の当該部品の数量" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "この部品の予定生産数量" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "在庫商品" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "リビジョン" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "総在庫" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "未割当株式" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "バリアントストック" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "重複部分" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "別のパートから初期データをコピー" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "初期在庫" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "初期在庫数で部品を作成" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "サプライヤー情報" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "この部品の初期サプライヤー情報を追加します。" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "コピーカテゴリパラメータ" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "選択したパーツカテゴリーからパラメータテンプレートをコピー" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "既存イメージ" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "既存の部品画像のファイル名" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "画像ファイルが存在しません" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "部品表全体の検証" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "ビルド" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "ビルドオーダーに必要なもの" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "ビルドオーダーに割り当てられました" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "セールスオーダーに必要なもの" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "セールスオーダーに割り当てられました" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "最小価格" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "最低価格の計算値の上書き" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "最低価格通貨" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "最大価格" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "最高価格の計算値を上書き" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "最高価格通貨" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "更新" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "この部品の価格を更新" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "提供された通貨から{default_currency}に変換できませんでした。" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "最低価格は最高価格を超えてはなりません。" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "最高価格は最低価格を下回ってはなりません。" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "親アセンブリを選択" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "構成部品の選択" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "BOMをコピーする部品を選択します。" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "既存データの削除" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "コピー前に既存のBOMアイテムを削除" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "インクルード継承" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "テンプレート化された部品から継承されたBOM項目を含めます。" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "無効な行をスキップ" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "無効な行をスキップするには、このオプションを有効にします。" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "コピー代用部品" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOMアイテムの重複時に代替部品をコピー" @@ -7099,15 +7204,15 @@ msgstr "配分数量" msgid "Label printing failed" msgstr "ラベル印刷に失敗しました" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "ラベルをPDFにレンダリングする際のエラー" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "ラベルをHTMLにレンダリングする際のエラー" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "印刷する項目はありません" @@ -7168,7 +7273,7 @@ msgstr "バーコードのネイティブサポートを提供" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "部品変更通知" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "パーツ `{part.name}` が `{part_action}` イベントでトリガーされました。" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDFラベルプリンタ" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "PDFラベルの印刷をネイティブでサポート" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "デバッグモード" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "デバッグモードを有効にする - PDFの代わりに生のHTMLを返します。" @@ -7568,7 +7673,7 @@ msgstr "ボーダー" msgid "Print a border around each label" msgstr "各ラベルの周囲に枠線を印刷します。" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "ランドスケープ" @@ -8029,7 +8134,7 @@ msgstr "プラグインはラベル印刷をサポートしていません" msgid "Invalid label dimensions" msgstr "無効なラベル寸法" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "テンプレートに有効な項目がありません" @@ -8073,112 +8178,112 @@ msgstr "プリントのモデルに装着" msgid "Save report output as an attachment against linked model instance when printing" msgstr "印刷時に、リンクされたモデルインスタンスに対してレポート出力を添付ファイルとして保存" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "ファイル名パターン" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "ファイル名生成パターン" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "テンプレートが有効" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "テンプレートの対象モデルタイプ" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "フィルター" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "テンプレートクエリフィルタ(key=valueペアのカンマ区切りリスト)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "テンプレートファイル" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "PDFレポートのページサイズ" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "レポートを横向きにレンダリング" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "統合" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "選択された項目に対して単一のレポートを生成します" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "テンプレート{self.name}から生成されたレポート" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "テンプレートの構文エラー" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "レポートの表示にエラーが発生しました" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "レポート生成エラー" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "レポート出力の統合エラー" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "幅 [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "ラベル幅(mm単位)" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "高さ [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "ラベルの高さ(mm単位)" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "ラベル印刷エラー" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "スニペット" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "レポートスニペットファイル" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "スニペットファイルの説明" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "資産" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "レポート資産ファイル" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "アセットファイルの説明" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "シリアル番号" @@ -8538,7 +8643,7 @@ msgstr "ストックロケーションの種類" msgid "Default icon for all locations that have no icon set (optional)" msgstr "アイコンが設定されていないすべての場所のデフォルトアイコン (オプション)" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "ストックロケーション" @@ -8546,11 +8651,11 @@ msgstr "ストックロケーション" msgid "Stock Locations" msgstr "在庫場所" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "所有者" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "所有者を選択" @@ -8558,7 +8663,7 @@ msgstr "所有者を選択" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "ストックアイテムは、構造的なストックロケーションに直接配置されることはありませんが、子ロケーションに配置されることはあります。" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "外部" @@ -8578,274 +8683,282 @@ msgstr "このロケーションのロケーションタイプ" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "いくつかのストックアイテムがすでにストックロケーションに配置されているため、このストックロケーションを構造化することはできません!" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "{field}は存在しません" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "部品の指定が必要" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "在庫品は、構造的な在庫場所に配置することはできません!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "仮想部品にストックアイテムを作成できません" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "パートタイプ('{self.supplier_part.part}')は{self.part}でなければなりません。" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "シリアル番号のある商品は数量が1でなければなりません。" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "数量が1以上の場合、シリアル番号は設定できません。" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "アイテムはそれ自身に属することはできません" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "is_building=Trueの場合、アイテムはビルド・リファレンスを持っていなければならない。" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "ビルド参照が同じ部品オブジェクトを指していません。" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "親株式" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "ベース部" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "この在庫品に一致するサプライヤー部品を選択してください" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "この在庫品はどこにありますか?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "この在庫品は以下の梱包で保管されています。" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "設置場所" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "このアイテムは他のアイテムにインストールされていますか?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "この商品のシリアル番号" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "このストックアイテムのバッチコード" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "在庫数" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "ソースビルド" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "このストックアイテムのビルド" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "消費者" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "このストックアイテムを消費したビルドオーダー" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "発注元" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "この在庫商品の購入注文" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "販売先オーダー" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "在庫品の有効期限。この日を過ぎると在庫は期限切れとなります。" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "枯渇時に削除" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "在庫がなくなったら、このストックアイテムを削除します。" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "購入時の単品購入価格" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "パートに変換" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "数量が在庫数を超えています" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "部品が追跡可能に設定されていません" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "数量は整数でなければなりません。" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "数量は在庫数 ({self.quantity}) を超えてはなりません。" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "シリアル番号はリストとして提供されなければなりません" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "数量がシリアル番号と一致しません" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "構造上ロケーションに在庫を割り当てることはできません" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "テストテンプレートが存在しません" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "在庫商品が販売注文に割り当てられました" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "ストックアイテムが他のアイテムに装着されている場合" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "在庫商品には他の商品が含まれています。" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "在庫商品が顧客に割り当てられました" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "在庫品は現在生産中です。" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "連番在庫の統合はできません" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "在庫品の重複" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "在庫品目は同じ部品を参照してください。" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "在庫品は同じサプライヤーの部品を参照する必要があります。" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "在庫状況コードが一致していること" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "在庫がないため移動できません。" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "ストックアイテムのトラッキング" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "記入上の注意" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "在庫品テスト結果" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "このテストには値を指定する必要があります。" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "このテストには添付ファイルをアップロードする必要があります。" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "このテストでは無効な値です。" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "試験結果" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "テスト出力値" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "試験結果添付" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "テストノート" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "テストステーション" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "試験が実施された試験ステーションの識別子。" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "開始" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "テスト開始のタイムスタンプ" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "修了済み" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "テスト終了のタイムスタンプ" @@ -8929,7 +9042,7 @@ msgstr "新しい商品のシリアル番号の入力" msgid "Supplier Part Number" msgstr "サプライヤー品番" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "期限切れ" @@ -9466,131 +9579,131 @@ msgstr "トークンが最後に使用された時間" msgid "Revoked" msgstr "失効" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "パーミッション設定" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "表示" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "項目を表示する権限" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "追加" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "項目を追加する権限" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "変更" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "項目を編集する権限" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "削除" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "項目を削除する権限" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "ボット" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "内部" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "ゲスト" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "言語" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "ユーザーの希望言語" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "テーマ" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "JSONとしてのウェブUI用の設定 - 手動で編集しないでください!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "ウィジェット" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "JSONとしてのダッシュボード・ウィジェットの設定 - 手動で編集しないでください!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "表示名" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "ユーザーの表示名選択" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "位置" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "主な役職名" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "ユーザーのステータスメッセージ" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "ユーザーの位置情報" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "ユーザーが積極的にシステムを利用" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "希望の連絡先" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "ユーザータイプ" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "どのようなユーザーですか?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "組織" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "ユーザーの主な所属組織" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "プライマリーグループ" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "ユーザーのプライマリグループ" diff --git a/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ko/LC_MESSAGES/django.po index c270f0489b..f7ea0862a1 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Korean\n" "Language: ko_KR\n" @@ -89,6 +89,7 @@ msgstr "{original}을(를) {unit}(으)로 변환할 수 없습니다" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "잘못된 수량이 제공되었습니다" @@ -104,11 +105,11 @@ msgstr "날짜 입력" msgid "Invalid decimal value" msgstr "잘못된 소수 값" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "잘못된 URL: 호스트명을 확인할 수 없습니다" msgid "URL points to a private or reserved IP address" msgstr "URL이 사설 또는 예약된 IP 주소를 가리킵니다" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "리디렉션이 너무 많습니다" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "연결 오류" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "서버가 잘못된 상태 코드를 반환했습니다" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "예외가 발생했습니다" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "서버가 잘못된 Content-Length 값을 반환했습니다" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "이미지 크기가 너무 큽니다!" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "이미지 다운로드가 최대 크기를 초과했습니다" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "원격 서버가 빈 응답을 반환했습니다" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "제공된 URL은 유효한 이미지 파일이 아닙니다" @@ -219,7 +220,7 @@ msgstr "앱에 로그인" msgid "Email" msgstr "이메일" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "다른 작업을 하기 전에 먼저 2단계 인증을 활성화해야 합니다." @@ -263,124 +264,108 @@ msgstr "참조(Reference)는 요구되는 패턴과 일치해야 합니다" msgid "Reference number is too large" msgstr "참조 번호가 너무 큽니다" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "잘못된 선택입니다" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "이름" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "설명" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "설명 (선택 사항)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "경로" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "같은 상위 항목 아래에는 중복된 이름이 있을 수 없습니다" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "마크다운 메모 (선택 사항)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "바코드 데이터" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "서드파티 바코드 데이터" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "바코드 해시" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "바코드 데이터의 고유 해시" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "기존 바코드를 찾았습니다" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "서버 오류" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "서버에 오류가 기록되었습니다." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "유효한 숫자여야 합니다" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "통화" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "사용 가능한 옵션에서 통화를 선택하세요" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "이 필드는 null일 수 없습니다." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "유효하지 않은 값" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "원격 이미지" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "원격 이미지 파일의 URL" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "원격 URL에서 이미지 다운로드가 활성화되어 있지 않습니다" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "원격 URL에서 이미지를 다운로드하지 못했습니다" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "콘텐츠 타입 형식이 올바르지 않습니다" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "콘텐츠 타입을 찾을 수 없습니다" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "콘텐츠 타입이 필요한 믹스인 클래스와 일치하지 않습니다" @@ -552,8 +537,8 @@ msgstr "잘못된 물리 단위" msgid "Not a valid currency code" msgstr "유효한 통화 코드가 아닙니다" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "주문 상태" @@ -561,21 +546,21 @@ msgstr "주문 상태" msgid "Parent Build" msgstr "직상위 빌드" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "변형(Variant) 포함" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "변형(Variant) 포함" msgid "Part" msgstr "부품" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "분류" @@ -605,7 +590,7 @@ msgstr "분류" msgid "Ancestor Build" msgstr "상위 계층 빌드" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "나에게 할당 됨" @@ -653,11 +638,11 @@ msgstr "완료일 이전" msgid "Completed after" msgstr "완료일 이후" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "최소 날짜" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "최대 날짜" @@ -669,16 +654,16 @@ msgstr "트리 제외" msgid "Build must be cancelled before it can be deleted" msgstr "빌드를 삭제하려면 먼저 취소해야 합니다" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "소모품" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "선택사항" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "조립품" @@ -687,32 +672,32 @@ msgstr "조립품" msgid "Tracked" msgstr "추적됨" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "테스트 가능" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "미결 주문" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "할당됨" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "소모됨" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "주문 중" @@ -720,7 +705,7 @@ msgstr "주문 중" msgid "Build not found" msgstr "빌드를 찾을 수 없습니다" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "작업 지시서" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "위치" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "산출물" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "작업 지시서 참조번호" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "빌드 상태" msgid "Build status code" msgstr "빌드 상태 코드" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "배치 코드" @@ -870,8 +855,8 @@ msgstr "배치 코드" msgid "Batch code for this build output" msgstr "이 빌드 산출물의 배치 코드" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "생성일" @@ -891,7 +876,7 @@ msgstr "목표 완료일" msgid "Target date for build completion. Build will be overdue after this date." msgstr "빌드 완료 목표일. 이 날짜 이후에는 빌드가 지연으로 처리됩니다." -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "완료일" @@ -907,8 +892,8 @@ msgstr "발행자" msgid "User who issued this build order" msgstr "이 작업 지시서를 발행한 사용자" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "담당" @@ -917,12 +902,12 @@ msgstr "담당" msgid "User or group responsible for this build order" msgstr "이 작업 지시서를 담당하는 사용자 또는 그룹" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "외부 링크" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "외부 URL로 연결" @@ -934,8 +919,8 @@ msgstr "빌드 우선순위" msgid "Priority of this build order" msgstr "이 빌드 주문의 우선순위" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "프로젝트 코드" @@ -968,7 +953,7 @@ msgstr "작업 지시서가 완료되었습니다" msgid "Serial numbers must be provided for trackable parts" msgstr "추적 가능한 부품에는 시리얼 번호를 제공해야 합니다" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "생산 완제품이 지정되지 않았습니다" @@ -980,47 +965,47 @@ msgstr "생산 완제품이 이미 완료되었습니다" msgid "Build output does not match Build Order" msgstr "생산 완제품이 작업 지시서와 일치하지 않습니다" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "수량은 0보다 커야 합니다" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "수량은 산출물 수량보다 클 수 없습니다" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "생산 완제품이 모든 필수 테스트를 통과하지 못했습니다" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "생산 완제품 {serial}이(가) 모든 필수 테스트를 통과하지 못했습니다" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "할당된 재고 항목이 아직 생산 중입니다" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "할당된 항목이 있는 빌드 산출물은 부분 완료할 수 없습니다" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "소요 자재 품목" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "빌드 객체" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "빌드 객체" msgid "Quantity" msgstr "수량" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "작업 지시서에 필요한 수량" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "소모된 재고 수량" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "마스터 부품이 추적 가능으로 표시되어 있으므로, 빌드 항목은 생산 완제품을 지정해야 합니다" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "선택한 재고 항목이 BOM 라인과 일치하지 않습니다" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "할당 수량은 0보다 커야 합니다" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "시리얼이 있는 재고의 수량은 1이어야 합니다" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "할당 수량({q})은 사용 가능한 재고 수량({a})을 초과할 수 없습니다" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "재고 항목이 과다 할당되었습니다" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "재고 항목" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "원본 재고 항목" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "빌드에 할당할 재고 수량" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "설치 대상" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "대상 재고 항목" @@ -1099,7 +1084,7 @@ msgstr "대상 재고 항목" msgid "Build Level" msgstr "빌드 레벨" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "부품명" @@ -1135,7 +1120,7 @@ msgstr "추적 가능한 부품에는 정수 수량이 필요합니다" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "BOM에 추적 가능한 부품이 포함되어 있으므로 정수 수량이 필요합니다" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "시리얼 번호 (일련번호)" @@ -1156,8 +1141,8 @@ msgstr "시리얼 번호 자동 할당" msgid "Automatically allocate required items with matching serial numbers" msgstr "일치하는 시리얼 번호로 필요한 항목을 자동으로 할당합니다" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "다음 시리얼 번호는 이미 존재하거나 유효하지 않습니다" @@ -1245,7 +1230,7 @@ msgstr "재고 항목이 이 빌드 주문에 완전히 할당되지 않았음 msgid "Required stock has not been fully allocated" msgstr "필요한 재고가 완전히 할당되지 않았습니다" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "불완전 수락" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part는 빌드 주문과 동일한 부품을 가리켜야 합 msgid "Item must be in stock" msgstr "항목은 재고에 있어야 합니다" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "사용 가능한 수량({q})을 초과했습니다" @@ -1306,7 +1291,7 @@ msgstr "추적 부품을 할당하려면 생산 완제품을 지정해야 합니 msgid "Build output cannot be specified for allocation of untracked parts" msgstr "비추적 부품 할당에는 생산 완제품을 지정할 수 없습니다" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "할당 항목을 제공해야 합니다" @@ -1386,9 +1371,9 @@ msgstr "설치 대상" msgid "Build" msgstr "빌드" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "공급업체 부품" @@ -1404,7 +1389,7 @@ msgstr "빌드 참조" msgid "Part Category Name" msgstr "부품 카테고리 이름" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "추적 가능" @@ -1412,29 +1397,29 @@ msgstr "추적 가능" msgid "Inherited" msgstr "상속됨" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "변형(Variant) 허용" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "BOM 항목" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "생산 중" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "빌드 예정" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "외부 재고" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "사용 가능 재고" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "사용자에게 이 첨부파일들을 삭제할 권한이 없습니다" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "사용자에게 이 첨부파일을 삭제할 권한이 없습니다" @@ -1554,610 +1543,634 @@ msgstr "플러그인 없음" msgid "Project Code Label" msgstr "프로젝트 코드 라벨" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "업데이트됨" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "마지막 업데이트 타임스탬프" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "업데이트 사용자" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "이 객체를 마지막으로 업데이트한 사용자" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "고유 프로젝트 코드" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "프로젝트 설명" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "이 프로젝트의 담당 사용자 또는 그룹" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "설정 키" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "설정 값" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "선택한 값이 유효한 옵션이 아닙니다" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "값은 불리언(Boolean)이어야 합니다" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "값은 정수여야 합니다" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "값은 유효한 숫자여야 합니다" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "값이 유효성 검사 기준을 통과하지 못했습니다" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "키 문자열은 고유해야 합니다" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "사용자" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "가격 구간 수량" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "가격" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "지정 수량에서의 단가" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "엔드포인트" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "이 웹훅을 수신하는 엔드포인트" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "이 웹훅의 이름" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "활성" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "이 웹훅이 활성 상태인가요" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "토큰" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "접근용 토큰" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "시크릿" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "HMAC용 공유 시크릿" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "메시지 ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "이 메시지의 고유 식별자" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "호스트" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "이 메시지를 수신한 호스트" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "헤더" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "이 메시지의 헤더" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "본문" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "이 메시지의 본문" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "이 메시지를 수신한 엔드포인트" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "처리됨" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "이 메시지 처리가 완료되었나요?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "ID" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "제목" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "링크" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "게시됨" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "작성자" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "요약" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "읽음" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "이 뉴스 항목을 읽었나요?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "이미지 파일" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "이 이미지의 대상 모델 유형" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "이 이미지의 대상 모델 ID" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "사용자 정의 단위" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "단위 기호는 고유해야 합니다" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "단위 이름은 유효한 식별자여야 합니다" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "단위 이름" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "기호" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "선택 단위 기호" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "정의" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "단위 정의" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "첨부파일" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "파일 누락" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "외부 링크 누락" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "모델 유형" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "이미지의 대상 모델 유형" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "첨부할 파일을 선택하세요" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "댓글" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "첨부파일 댓글" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "업로드 날짜" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "파일이 업로드된 날짜" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "파일 크기" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "바이트 단위의 파일 크기" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "첨부파일에 대해 유효하지 않은 모델 유형이 지정되었습니다" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "사용자 정의 상태" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "사용자 정의 상태" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "참조 상태 세트" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "이 사용자 정의 상태로 확장되는 상태 세트" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "논리 키" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "업무 로직에서 이 사용자 정의 상태와 동일한 상태 논리 키" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "값" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "모델 데이터베이스에 저장될 숫자 값" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "상태 이름" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "라벨" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "프론트엔드에 표시될 라벨" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "색상" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "프론트엔드에 표시될 색상" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "모델" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "이 상태가 연결된 모델" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "모델을 선택해야 합니다" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "키를 선택해야 합니다" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "논리 키를 선택해야 합니다" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "키는 논리 키와 달라야 합니다" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "유효한 참조 상태 클래스가 제공되어야 합니다" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "키는 참조 상태의 논리 키들과 달라야 합니다" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "논리 키는 참조 상태의 논리 키 목록에 포함되어야 합니다" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "이름은 참조 상태의 이름들과 달라야 합니다" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "선택 목록" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "선택 목록" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "선택 목록 이름" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "선택 목록 설명" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "잠김" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "이 선택 목록이 잠겨 있나요?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "이 선택 목록을 사용할 수 있나요?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "소스 플러그인" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "선택 목록을 제공하는 플러그인" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "소스 문자열" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "이 목록에 사용된 소스를 식별하는 선택 문자열" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "기본 항목" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "이 선택 목록의 기본 항목" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "생성됨" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "선택 목록이 생성된 날짜 및 시간" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "마지막 업데이트" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "선택 목록이 마지막으로 업데이트된 날짜 및 시간" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "선택 목록 항목" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "선택 목록 항목" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "이 항목이 속한 선택 목록" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "선택 목록 항목의 값" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "선택 목록 항목 라벨" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "선택 목록 항목 설명" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "이 선택 목록 항목이 활성 상태인가요?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "매개변수 템플릿" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "매개변수 템플릿" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "체크박스 매개변수에는 단위를 지정할 수 없습니다" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "체크박스 매개변수에는 선택지를 지정할 수 없습니다" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "선택지는 고유해야 합니다" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "매개변수 템플릿 이름은 고유해야 합니다" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "이 매개변수 템플릿의 대상 모델 유형" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "매개변수 이름" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "단위" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "이 매개변수의 물리 단위" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "매개변수 설명" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "체크박스" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "이 매개변수는 체크박스인가요?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "선택지" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "이 매개변수에 대한 유효한 선택지(쉼표로 구분)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "이 매개변수의 선택 목록" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "사용" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "이 매개변수 템플릿을 사용하나요?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "매개변수" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "매개변수" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "매개변수 값에 대한 선택지가 올바르지 않습니다" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "매개변수에 지정된 모델 유형이 올바르지 않습니다" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "모델 ID" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "이 매개변수의 대상 모델 ID" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "템플릿" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "매개변수 템플릿" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "데이터" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "매개변수 값" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "매개변수 값" msgid "Note" msgstr "메모" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "선택적 메모 필드" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "바코드 스캔" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "바코드 데이터" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "바코드를 스캔한 사용자" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "타임스탬프" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "바코드 스캔 날짜 및 시간" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "바코드를 처리한 URL 엔드포인트" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "컨텍스트" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "바코드 스캔의 컨텍스트 데이터" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "응답" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "바코드 스캔의 응답 데이터" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "결과" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "바코드 스캔이 성공했나요?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "오류가 발생했습니다" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "이메일 메시지" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "이메일 메시지" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "공지됨" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "전송됨" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "실패" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "전달됨" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "확인됨" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "수신" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "발신" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "회신 없음" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "전달 추적" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "읽음 추적" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "클릭 추적" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "전역 ID" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "이 메시지의 식별자(외부 시스템에서 제공될 수 있음)" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "스레드 ID" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "이 메시지 스레드의 식별자(외부 시스템에서 제공될 수 있음)" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "스레드" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "이 메시지에 연결된 스레드" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "우선순위" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "이메일 스레드" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "이메일 스레드" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "키" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "이 스레드의 고유 키(스레드 식별에 사용)" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "이 스레드의 고유 식별자" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "내부 시작" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "이 스레드는 내부에서 시작되었나요?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "스레드가 생성된 날짜 및 시간" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "스레드가 마지막으로 업데이트된 날짜 및 시간" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "항목 수령됨" @@ -2457,7 +2470,7 @@ msgstr "파일명" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "모델 유형" @@ -2601,13 +2614,13 @@ msgstr "환율 업데이트 간격" msgid "How often to update exchange rates (set to zero to disable)" msgstr "환율을 업데이트하는 주기(0으로 설정하면 비활성화)" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "일" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "사용할 환율 업데이트 플러그인" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "URL에서 다운로드" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "외부 URL에서 원격 이미지 및 파일 다운로드를 허용합니다" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "다운로드 크기 제한" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "원격 이미지의 최대 허용 다운로드 크기" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "URL 다운로드에 사용할 User-Agent" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "엄격한 URL 검증" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "URL 검증 시 스키마 지정을 요구합니다" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "업데이트 확인 간격" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "업데이트를 확인하는 주기(0으로 설정하면 비활성화)" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "자동 백업" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "데이터베이스 및 미디어 파일의 자동 백업을 활성화합니다" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "자동 백업 간격" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "자동 백업 이벤트 사이의 일 수를 지정합니다" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "작업 삭제 간격" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "백그라운드 작업 결과는 지정한 일 수 이후 삭제됩니다" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "오류 로그 삭제 간격" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "오류 로그는 지정한 일 수 이후 삭제됩니다" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "알림 삭제 간격" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "사용자 알림은 지정한 일 수 이후 삭제됩니다" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "이메일 삭제 간격" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "이메일 메시지는 지정한 일 수 이후 삭제됩니다" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "이메일 로그 보호" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "이메일 로그 항목 삭제를 방지합니다" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "바코드 지원" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "웹 인터페이스에서 바코드 스캐너 지원을 활성화합니다" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "바코드 결과 저장" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "바코드 스캔 결과를 데이터베이스에 저장합니다" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "바코드 스캔 최대 개수" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "저장할 바코드 스캔 결과의 최대 개수" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "바코드 입력 지연" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "바코드 입력 처리 지연 시간" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "바코드 웹캠 지원" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "브라우저에서 웹캠을 통한 바코드 스캔을 허용합니다" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "바코드 데이터 표시" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "브라우저에 바코드 데이터를 텍스트로 표시합니다" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "바코드 생성 플러그인" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "내부 바코드 데이터 생성에 사용할 플러그인" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "부품 리비전" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "부품에 리비전 필드를 활성화합니다" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "조립품 리비전만" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "조립 부품에만 리비전을 허용합니다" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "조립품에서 삭제 허용" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "조립품에 사용되는 부품의 삭제를 허용합니다" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN 정규식" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "부품 IPN과 일치시키기 위한 정규식 패턴" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "IPN 중복 허용" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "여러 부품이 동일한 IPN을 공유하도록 허용합니다" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "IPN 편집 허용" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "부품 편집 중 IPN 값 변경을 허용합니다" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "부품 BOM 데이터 복사" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "부품을 복제할 때 기본으로 BOM 데이터를 복사합니다" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "부품 매개변수 데이터 복사" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "부품을 복제할 때 기본으로 매개변수 데이터를 복사합니다" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "부품 테스트 데이터 복사" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "부품을 복제할 때 기본으로 테스트 데이터를 복사합니다" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "카테고리 매개변수 템플릿 복사" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "부품을 생성할 때 카테고리 매개변수 템플릿을 복사합니다" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "부품은 기본적으로 템플릿입니다" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "부품은 기본적으로 다른 구성요소로 조립할 수 있습니다" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "구성요소" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "부품은 기본적으로 하위 구성요소로 사용할 수 있습니다" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "구매 가능" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "부품은 기본적으로 구매 가능합니다" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "판매 가능" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "부품은 기본적으로 판매 가능합니다" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "부품은 기본적으로 추적 가능합니다" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "가상" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "부품은 기본적으로 가상입니다" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "관련 부품 표시" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "부품에 대한 관련 부품을 표시합니다" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "초기 재고 데이터" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "새 부품 추가 시 초기 재고 생성을 허용합니다" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "초기 공급업체 데이터" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "새 부품 추가 시 초기 공급업체 데이터 생성을 허용합니다" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "부품명 표시 형식" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "부품명을 표시하는 형식" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "부품 카테고리 기본 아이콘" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "부품 카테고리 기본 아이콘(비워두면 아이콘 없음)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "가격 최소 소수 자릿수" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "가격 데이터를 표시할 때 최소 소수 자릿수" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "가격 최대 소수 자릿수" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "가격 데이터를 표시할 때 최대 소수 자릿수" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "공급업체 가격 사용" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "전체 가격 계산에 공급업체 수량별 가격을 포함합니다" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "구매 이력 우선" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "과거 구매 주문 가격이 공급업체 수량별 가격보다 우선합니다" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "재고 항목 가격 사용" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "가격 계산에 수동으로 입력한 재고 데이터의 가격을 사용합니다" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "재고 항목 가격 유효 기간" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "가격 계산에서 지정한 일 수보다 오래된 재고 항목을 제외합니다" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "변형(Variant) 가격 사용" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "전체 가격 계산에 변형(Variant) 가격을 포함합니다" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "활성 변형만" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "변형(Variant) 가격 계산에 활성 변형 부품만 사용합니다" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "가격 자동 업데이트" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "내부 데이터가 변경되면 부품 가격을 자동으로 업데이트" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "가격 재구성 간격" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "부품 가격이 자동으로 업데이트되기까지의 일 수" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "내부 가격" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "부품에 대해 내부 가격 사용" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "내부 가격 우선 적용" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "가능한 경우 내부 가격이 가격 범위 계산보다 우선합니다" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "BOM 수량 0 허용" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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 항목에 수량 0을 허용합니다. 설정 수량을 사용해 빌드 수량과 무관하게 빌드당 필요한 수량을 정의할 수 있습니다" -#: common/setting/system.py:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "라벨 인쇄 사용" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "웹 인터페이스에서 라벨 인쇄를 사용합니다" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "라벨 이미지 DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "라벨 인쇄 플러그인에 제공할 이미지 파일 생성 시 DPI 해상도" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "보고서 사용" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "보고서 생성을 사용합니다" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "디버그 모드" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "디버그 모드에서 보고서 생성(HTML 출력)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "보고서 오류 로그" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "보고서 생성 중 발생하는 오류를 기록합니다" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "페이지 크기" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "PDF 보고서의 기본 페이지 크기" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "매개변수 단위 강제" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "단위가 제공된 경우, 매개변수 값은 지정된 단위와 일치해야 합니다" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "전역 고유 시리얼" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "재고 항목의 시리얼 번호는 전역적으로 고유해야 합니다" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "소진된 재고 삭제" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "재고 항목이 소진되었을 때의 기본 동작을 결정합니다" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "배치 코드 템플릿" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "재고 항목의 기본 배치 코드를 생성하기 위한 템플릿" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "재고 만료" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "재고 만료 기능 사용" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "만료 재고 판매" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "만료된 재고의 판매를 허용합니다" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "재고 경과 시간" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "만료 전 재고 항목을 오래된 것으로 간주하는 일 수" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "만료 재고로 빌드" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "만료된 재고로 빌드하는 것을 허용합니다" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "재고 소유권 제어" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "재고 위치 및 항목에 대한 소유권 제어를 사용합니다" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "재고 위치 기본 아이콘" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "재고 위치 기본 아이콘(비어 있으면 아이콘 없음)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "설치된 재고 항목 표시" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "재고 표에서 설치된 재고 항목을 표시합니다" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "항목 설치 시 BOM 확인" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "설치된 재고 항목은 상위 부품의 BOM에 존재해야 합니다" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "재고 없음 상태 이동 허용" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "재고가 없는 재고 항목을 재고 위치 간에 이동할 수 있도록 허용합니다" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "작업 지시서 참조번호 패턴" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "작업 지시서 참조번호 필드를 생성하기 위한 필수 패턴" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "책임자 필수" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "각 주문에는 책임자가 지정되어야 합니다" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "활성 부품 필수" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "비활성 부품에 대해 작업 지시서 생성을 방지합니다" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "잠긴 부품 필수" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "잠기지 않은 부품에 대해 작업 지시서 생성을 방지합니다" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "유효한 BOM 필수" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "BOM이 검증되지 않으면 작업 지시서 생성을 방지합니다" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "하위 주문 종료 필수" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "모든 하위 주문이 종료될 때까지 작업 지시서 완료를 방지합니다" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "외주 생산 작업 지시서" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "외주 생산 작업 지시서 기능 사용" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "테스트 통과 전까지 차단" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "\"배송됨\" 상태를 건너뛰고, 배송된 것으로 표시된 판매 주문을 자동으로 완료 처리합니다" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "구매 주문 참조 패턴" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "구매 주문 참조 필드를 생성하기 위한 필수 패턴" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "완료된 구매 주문 편집" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "구매 주문이 배송되었거나 완료된 후에도 편집을 허용합니다" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "통화 변환" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "재고 수령 시 항목 값을 기준 통화로 변환합니다" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "구매 주문 자동 완료" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "모든 라인 항목을 수령하면 구매 주문을 자동으로 완료로 표시합니다" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "비밀번호 찾기 사용" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "로그인 페이지에서 비밀번호 찾기 기능을 사용합니다" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "회원가입 사용" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "로그인 페이지에서 사용자 자기 등록(회원가입)을 사용합니다" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "SSO 사용" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "로그인 페이지에서 SSO를 사용합니다" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "SSO 등록 사용" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "로그인 페이지에서 SSO를 통한 자기 등록(회원가입)을 사용합니다" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "SSO 그룹 동기화 사용" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "IdP에서 제공하는 그룹과 InvenTree 그룹의 동기화를 사용합니다" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSO 그룹 키" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "IdP에서 제공하는 groups 클레임 속성의 이름" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "SSO 그룹 매핑" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "SSO 외부 그룹 제거" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "이메일 필수" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "회원가입 시 이메일 입력을 요구합니다" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "SSO 사용자 자동 입력" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "SSO 계정 데이터에서 사용자 상세 정보를 자동으로 채웁니다" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "이메일 2회 입력" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "회원가입 시 이메일을 두 번 입력하도록 요청합니다" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "비밀번호 2회 입력" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "회원가입 시 비밀번호를 두 번 입력하도록 요청합니다" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "허용된 도메인" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "특정 도메인으로 회원가입을 제한합니다(쉼표로 구분, @로 시작)" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "회원가입 시 그룹" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "MFA 강제" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "사용자는 다중 요소 보안을 사용해야 합니다." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "이 설정을 활성화하면 모든 사용자가 다중 요소 인증을 설정해야 합니다. 모든 세션이 즉시 연결 해제됩니다." -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "시작 시 플러그인 확인" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "시작 시 모든 플러그인이 설치되어 있는지 확인합니다(컨테이너 환경에서 사용)" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "플러그인 업데이트 확인" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "설치된 플러그인의 업데이트를 주기적으로 확인합니다" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "URL 통합 사용" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "플러그인이 URL 라우트를 추가할 수 있도록 허용합니다" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "내비게이션 통합 사용" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "플러그인이 내비게이션에 통합될 수 있도록 허용합니다" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "앱 통합 사용" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "플러그인이 앱을 추가할 수 있도록 허용합니다" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "스케줄 통합 사용" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "플러그인이 예약 작업을 실행할 수 있도록 허용합니다" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "이벤트 통합 사용" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "플러그인이 내부 이벤트에 응답할 수 있도록 허용합니다" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "인터페이스 통합 사용" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "플러그인이 사용자 인터페이스에 통합될 수 있도록 허용합니다" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "메일 통합 사용" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "플러그인이 발신/수신 메일을 처리할 수 있도록 허용합니다" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "프로젝트 코드 사용" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "프로젝트를 추적하기 위한 프로젝트 코드를 사용합니다" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "재고 실사 사용" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "과거 재고 수준과 가치를 기록하는 기능을 사용합니다" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "외부 위치 제외" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "외부 위치의 재고 품목을 재고 실사 계산에서 제외합니다" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "자동 재고 실사 주기" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "자동 재고 실사 기록 간격(일)" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "오래된 재고 실사 항목 삭제" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "지정된 일수보다 오래된 재고 실사 항목을 삭제합니다" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "재고 실사 삭제 간격" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "재고 실사 항목은 지정된 일수 후 삭제됩니다" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "오래된 재고 추적 항목 삭제" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "지정된 일수보다 오래된 재고 추적 항목을 삭제합니다" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "재고 추적 삭제 간격" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "재고 추적 항목은 지정된 일수 후 삭제됩니다" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "사용자 전체 이름 표시" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "사용자 이름 대신 사용자 전체 이름을 표시합니다" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "사용자 프로필 표시" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "프로필 페이지에 사용자 프로필을 표시합니다" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "테스트 스테이션 데이터 사용" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "테스트 결과를 위한 테스트 스테이션 데이터 수집을 사용합니다" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "장비 핑 사용" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "등록된 장비의 상태를 확인하기 위해 주기적으로 핑 작업을 수행합니다" @@ -3951,6 +4008,14 @@ msgstr "마지막으로 사용한 인쇄 장비" msgid "Save the last used printing machines for a user" msgstr "사용자의 마지막 사용 인쇄 장비를 저장" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "모든 모델" @@ -4012,8 +4077,8 @@ msgstr "내부 부품이 활성화됨" msgid "Supplier is Active" msgstr "공급업체가 활성화됨" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "제조사" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "연락처 이메일 주소" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "담당자" @@ -4111,7 +4176,7 @@ msgstr "세금 ID" msgid "Company Tax ID" msgstr "회사 세금 ID" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "주소" @@ -4203,12 +4268,12 @@ msgstr "내부용 배송 메모" msgid "Link to address information (external)" msgstr "주소 정보 링크(외부)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "제조사 부품" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "기본 부품" @@ -4221,8 +4286,8 @@ msgstr "부품 선택" msgid "Select manufacturer" msgstr "제조사 선택" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN" @@ -4250,8 +4315,8 @@ msgstr "포장 단위는 0보다 커야 합니다" msgid "Linked manufacturer part must reference the same base part" msgstr "연결된 제조사 부품은 동일한 기본 부품을 참조해야 합니다" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "공급업체" msgid "Select supplier" msgstr "공급업체 선택" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "공급업체 SKU" @@ -4290,15 +4355,15 @@ msgstr "외부 공급업체 부품 링크 URL" msgid "Supplier part description" msgstr "공급업체 부품 설명" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "기본 비용" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "최소 요금(예: 보관 수수료)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "포장" @@ -4315,7 +4380,7 @@ msgstr "포장 수량" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "한 포장에 공급되는 총 수량입니다. 단품인 경우 비워 두세요." -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "배수" @@ -4339,23 +4404,23 @@ msgstr "가용성 데이터의 마지막 업데이트 날짜" msgid "Supplier Price Break" msgstr "공급업체 가격 구간" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "이 공급업체에서 사용하는 기본 통화" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "회사명" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "재고 있음" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "가격 구간" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "표시 이름" @@ -4511,7 +4576,7 @@ msgstr "원본 행 데이터" msgid "Errors" msgstr "오류" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "유효" @@ -4623,7 +4688,7 @@ msgstr "각 라벨에 대해 인쇄할 복사본 수" msgid "Connected" msgstr "연결됨" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "알 수 없음" @@ -4727,7 +4792,7 @@ msgstr "속성 키" msgid "Value of the property" msgstr "속성 값" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "그룹" @@ -4751,117 +4816,117 @@ msgstr "최대 진행도" msgid "Maximum value for progress type, required if type=progress" msgstr "진행도 유형의 최대값( type=progress 인 경우 필수)" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "주문 참조" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "미결" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "프로젝트 코드 있음" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "생성자" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "이전 생성" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "이후 생성" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "시작일 있음" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "시작일 이전" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "시작일 이후" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "목표일 있음" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "목표일 이전" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "목표일 이후" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "이전 업데이트" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "이후 업데이트" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "가격 정보 있음" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "완료일 이전" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "완료일 이후" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "외주 생산 작업 지시서" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "주문" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "주문 완료" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "내부 부품" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "주문 대기" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "완료됨" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "배송 있음" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "배송을 찾을 수 없습니다" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "구매 주문" msgid "Sales Order" msgstr "판매 주문" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "총액" msgid "Total price for this order" msgstr "이 주문의 총액" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "주문 통화" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "이 주문의 통화(비워 두면 회사 기본값 사용)" @@ -4914,11 +4979,11 @@ msgstr "주소가 선택한 회사와 일치하지 않습니다" msgid "Order description (optional)" msgstr "주문 설명(선택 사항)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "이 주문의 프로젝트 코드를 선택하세요" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "외부 페이지 링크" @@ -4930,7 +4995,7 @@ msgstr "시작일" msgid "Scheduled start date for this order" msgstr "이 주문의 예정 시작일" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "목표일" @@ -4963,12 +5028,12 @@ msgstr "이 주문의 연락 담당자" msgid "Company address for this order" msgstr "이 주문의 회사 주소" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "주문 참조" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "상태" @@ -4992,15 +5057,15 @@ msgstr "공급업체 주문 참조 코드" msgid "received by" msgstr "수령자" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "주문이 완료된 날짜" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "목적지" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "수령된 품목의 목적지" @@ -5024,616 +5089,624 @@ msgstr "수량은 양수여야 합니다" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "가상 부품에는 일련번호를 할당할 수 없습니다" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "고객" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "품목을 판매하는 대상 회사" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "판매 주문 상태" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "고객 참조" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "고객 주문 참조 코드" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "발송일" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "발송자" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "주문이 이미 완료되었습니다" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "주문이 이미 취소되었습니다" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "열린 주문만 완료로 표시할 수 있습니다" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "미완료 발송이 있어 주문을 완료할 수 없습니다" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "미완료 할당이 있어 주문을 완료할 수 없습니다" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "미완료 라인 항목이 있어 주문을 완료할 수 없습니다" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "이 주문은 잠겨 있어 수정할 수 없습니다" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "품목 수량" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "라인 번호" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "이 항목의 라인 번호(선택)" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "라인 항목 참조" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "라인 항목 메모" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "이 라인 항목의 목표일(비워 두면 주문의 목표일을 사용)" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "라인 항목 설명(선택)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "이 라인의 추가 정보" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "단가" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "구매 주문 라인 항목" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "공급업체 부품은 공급업체와 일치해야 합니다" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "빌드 주문은 외부로 표시되어야 합니다" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "빌드 주문은 조립 부품에만 연결할 수 있습니다" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "빌드 주문 부품은 라인 항목 부품과 일치해야 합니다" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "공급업체 부품" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "수령됨" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "수령된 품목 수" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "구매 가격" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "단위 구매 가격" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "이 라인 항목으로 이행할 외주 생산 작업 지시서" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "구매 주문 추가 라인" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "판매 주문 라인 항목" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "판매 가능한 부품만 판매 주문에 할당할 수 있습니다" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "판매 가격" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "단위 판매 가격" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "발송됨" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "발송 수량" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "판매 주문 발송" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "발송 주소는 고객과 일치해야 합니다" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "이 발송의 배송지 주소" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "발송 날짜" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "배송일" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "발송물 배송 날짜" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "확인자" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "이 발송을 확인한 사용자" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "발송" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "발송 번호" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "운송장 번호" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "발송 추적 정보" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "송장 번호" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "연결된 송장의 참조 번호" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "발송이 이미 전송되었습니다" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "발송에 할당된 재고 품목이 없습니다" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "발송은 완료하기 전에 확인되어야 합니다" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "판매 주문 추가 라인" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "판매 주문 할당" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "재고 품목이 할당되지 않았습니다" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "부품이 다른 라인에 재고 품목을 할당할 수 없습니다" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "부품이 없는 라인에는 재고를 할당할 수 없습니다" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "할당 수량은 재고 수량을 초과할 수 없습니다" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "할당 수량은 0보다 커야 합니다" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "일련번호가 있는 재고 품목의 수량은 1이어야 합니다" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "판매 주문이 발송과 일치하지 않습니다" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "발송이 판매 주문과 일치하지 않습니다" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "라인" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "판매 주문 발송 참조" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "품목" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "할당할 재고 품목을 선택하세요" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "재고 할당 수량을 입력하세요" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "반품 주문 참조" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "품목이 반품되는 회사" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "반품 주문 상태" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "반품 주문 라인 항목" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "재고 품목을 지정해야 합니다" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "반품 수량이 재고 수량을 초과합니다" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "반품 수량은 0보다 커야 합니다" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "일련번호가 있는 재고 품목에 대한 수량이 올바르지 않습니다" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "고객에게서 반품받을 품목을 선택하세요" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "수령일" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "이 반품 품목을 수령한 날짜" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "결과" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "이 라인 항목의 결과" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "이 라인 항목의 반품 또는 수리에 관련된 비용" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "반품 주문 추가 라인" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "주문 ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "복제할 주문의 ID" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "라인 복사" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "원본 주문에서 라인 항목을 복사" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "추가 라인 복사" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "원본 주문에서 추가 라인 항목을 복사" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "매개변수 복사" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "원본 주문에서 주문 매개변수를 복사" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "완료된 라인" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "주문 복제" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "이 주문을 복제하기 위한 옵션을 지정하세요" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "유효하지 않은 주문 ID" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "공급업체 이름" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "주문을 취소할 수 없습니다" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "미완료 라인 항목이 있어도 주문을 종료할 수 있도록 허용" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "주문에 미완료 라인 항목이 있습니다" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "주문이 열려 있지 않습니다" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "자동 가격 책정" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "공급업체 부품 데이터를 기반으로 구매 가격을 자동으로 계산" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "구매 가격 통화" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "항목 병합" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "부품, 목적지, 목표일이 같은 항목을 하나의 라인 항목으로 병합" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "내부 부품 번호" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "내부 부품 이름" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "공급업체 부품을 지정해야 합니다" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "구매 주문을 지정해야 합니다" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "공급업체는 구매 주문과 일치해야 합니다" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "구매 주문은 공급업체와 일치해야 합니다" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "라인 항목" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "수령 품목의 목적지 위치를 선택하세요" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "입고 재고 품목의 배치 코드를 입력하세요" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "만료일" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "입고 재고 품목의 만료일을 입력하세요" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "입고 재고 품목의 일련번호를 입력하세요" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "입고 재고 품목의 포장 정보를 재정의" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "입고 재고 품목에 대한 추가 메모" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "바코드" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "스캔된 바코드" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "바코드가 이미 사용 중입니다" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "라인 항목을 제공해야 합니다" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "목적지 위치를 지정해야 합니다" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "제공된 바코드 값은 고유해야 합니다" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "발송" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "완료된 발송" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "할당된 라인" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "판매 가격 통화" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "할당된 품목" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "발송 세부 정보가 제공되지 않았습니다" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "라인 항목이 이 주문과 연결되어 있지 않습니다" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "수량은 양수여야 합니다" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "할당할 일련번호를 입력하세요" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "발송이 이미 발송되었습니다" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "발송이 이 주문과 연결되어 있지 않습니다" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "다음 일련번호에 대한 일치 항목을 찾을 수 없습니다" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "다음 일련번호는 사용할 수 없습니다" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "반품 주문 라인 항목" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "라인 항목이 반품 주문과 일치하지 않습니다" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "라인 항목이 이미 수령되었습니다" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "진행 중인 주문에 대해서만 품목을 수령할 수 있습니다" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "반품 수량" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "라인 가격 통화" @@ -5756,59 +5829,63 @@ msgstr "리비전 여부" msgid "Has Revisions" msgstr "리비전 있음" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "BOM 유효" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "카테고리 계층 포함" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "참이면 지정된 카테고리의 하위 카테고리에 있는 항목을 포함합니다" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "숫자 카테고리 ID 또는 'null' 값으로 필터" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "조립 부품이 활성 상태" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "조립 부품을 추적할 수 있음" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "조립 부품을 테스트할 수 있음" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "구성 부품이 활성 상태" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "구성 부품을 추적할 수 있음" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "구성 부품을 테스트할 수 있음" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "구성 부품이 조립품임" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "구성 부품이 가상 부품임" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "사용 가능한 재고 있음" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "사용" @@ -5821,7 +5898,7 @@ msgstr "부품 카테고리" msgid "Part Categories" msgstr "부품 카테고리" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "기본 위치" @@ -5849,7 +5926,7 @@ msgstr "이 카테고리의 부품 기본 키워드" msgid "Icon" msgstr "아이콘" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "아이콘(선택)" @@ -5870,984 +5947,1012 @@ msgstr "기본값" msgid "Default Parameter Value" msgstr "기본 매개변수 값" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "부품" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "잠긴 부품의 매개변수는 삭제할 수 없습니다" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "잠긴 부품의 매개변수는 수정할 수 없습니다" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "잠겨 있어 이 부품을 삭제할 수 없습니다" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "여전히 활성 상태라 이 부품을 삭제할 수 없습니다" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "조립품에 사용 중이라 이 부품을 삭제할 수 없습니다" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "부품 '{self}'은(는) '{parent}'의 BOM에 사용할 수 없습니다(순환 참조)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "부품 '{parent}'이(가) '{self}'의 BOM에 사용되고 있습니다(순환 참조)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN은 정규식 패턴 {pattern}과 일치해야 합니다" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "부품은 자기 자신의 개정이 될 수 없습니다" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "개정으로 표시된 부품에는 개정 코드가 지정되어야 합니다" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "개정은 조립 부품에만 허용됩니다" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "템플릿 부품의 개정을 만들 수 없습니다" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "상위 부품은 동일한 템플릿을 가리켜야 합니다" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "이 일련번호의 재고 항목이 이미 존재합니다" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "부품 설정에서 중복 IPN은 허용되지 않습니다" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "중복된 부품 개정이 이미 존재합니다." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "이 이름, IPN 및 개정의 부품이 이미 존재합니다." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "부품은 구조 부품 카테고리에 할당할 수 없습니다!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "부품 이름" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "템플릿 여부" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "이 부품은 템플릿 부품인가요?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "이 부품은 다른 부품의 변형(Variant)인가요?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "변형 대상" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "부품 설명(선택)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "키워드" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "검색 결과에서 가시성을 높이기 위한 부품 키워드" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "부품 카테고리" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "부품 개정 또는 버전 번호" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "개정" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "이 부품은 다른 부품의 개정인가요?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "개정 대상" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "이 항목은 보통 어디에 보관되나요?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "기본 만료" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "이 부품의 재고 항목 만료 기간(일)" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "최소 재고" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "허용되는 최소 재고 수준" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "이 부품의 측정 단위" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "이 부품을 다른 부품으로 조립/제작할 수 있나요?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "이 부품을 사용해 다른 부품을 제작할 수 있나요?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "이 부품에 고유 항목 추적 기능이 있나요?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "이 부품에 대한 테스트 결과를 기록할 수 있나요?" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "이 부품을 외부 공급업체에서 구매할 수 있나요?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "이 부품을 고객에게 판매할 수 있나요?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "이 부품이 활성 상태인가요?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "잠긴 부품은 편집할 수 없습니다" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "소프트웨어 제품이나 라이선스 같은 가상 부품인가요?" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "BOM 검증됨" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "이 부품의 BOM이 유효한가요?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "BOM 체크섬" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "저장된 BOM 체크섬" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "BOM 검증자" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "BOM 검증 날짜" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "생성 사용자" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "이 부품의 책임 소유자" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "판매 배수" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "가격 계산 캐시에 사용되는 통화" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "최소 BOM 비용" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "구성 부품의 최소 비용" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "최대 BOM 비용" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "구성 부품의 최대 비용" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "최소 구매 비용" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "과거 구매 비용의 최소값" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "최대 구매 비용" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "과거 구매 비용의 최대값" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "최소 내부 가격" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "내부 가격 구간에 기반한 최소 비용" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "최대 내부 가격" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "내부 가격 구간에 기반한 최대 비용" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "최소 공급업체 가격" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "외부 공급업체로부터의 최소 가격" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "최대 공급업체 가격" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "외부 공급업체로부터의 최대 가격" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "최소 변형 비용" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "변형 부품의 계산된 최소 비용" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "최대 변형 비용" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "변형 부품의 계산된 최대 비용" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "최소 비용" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "최소 비용 재정의" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "최대 비용" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "최대 비용 재정의" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "계산된 전체 최소 비용" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "계산된 전체 최대 비용" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "최소 판매 가격" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "가격 구간에 기반한 최소 판매 가격" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "최대 판매 가격" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "가격 구간에 기반한 최대 판매 가격" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "최소 판매 비용" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "과거 판매 가격의 최소값" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "최대 판매 비용" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "과거 판매 가격의 최대값" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "재고 조사 대상 부품" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "항목 수" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "재고 조사 시점의 개별 재고 항목 수" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "재고 조사 시점의 사용 가능한 총 재고" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "날짜" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "재고 조사가 수행된 날짜" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "최소 재고 비용" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "보유 재고의 추정 최소 비용" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "최대 재고 비용" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "보유 재고의 추정 최대 비용" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "부품 판매 가격 구간" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "부품 테스트 템플릿" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "템플릿 이름이 올바르지 않습니다 - 영숫자 문자를 최소 1개 포함해야 합니다" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "테스트 템플릿은 테스트 가능한 부품에만 만들 수 있습니다" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "같은 키의 테스트 템플릿이 이 부품에 이미 존재합니다" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "테스트 이름" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "테스트 이름을 입력하세요" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "테스트 키" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "테스트를 위한 단순화된 키" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "테스트 설명" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "이 테스트에 대한 설명을 입력하세요" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "이 테스트가 활성화되어 있나요?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "필수" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "이 테스트는 통과가 필수인가요?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "값 필요" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "테스트 결과를 추가할 때 값이 필요한가요?" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "첨부 필요" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "테스트 결과를 추가할 때 파일 첨부가 필요한가요?" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "이 테스트의 유효한 선택지(쉼표로 구분)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "수량은 0 이상이어야 합니다" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "변형 조립품이 잠겨 있어 BOM 항목을 수정할 수 없습니다" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "상위 부품을 선택하세요" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "하위 부품" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "BOM에 사용할 부품을 선택하세요" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "이 BOM 항목의 BOM 수량" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "이 BOM 항목은 선택 사항입니다" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "이 BOM 항목은 소모품입니다(제작 주문에서 추적되지 않음)" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "설정 수량" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "설정 손실을 고려해 제작에 추가로 필요한 수량" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "손실률" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "제작 손실률 추정치(백분율, 0-100)" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "반올림 배수" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "필요 생산 수량을 이 값의 가장 가까운 배수로 올림합니다" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "BOM 항목 참조" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "BOM 항목 메모" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "체크섬" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "BOM 라인 체크섬" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "검증됨" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "이 BOM 항목이 검증되었습니다" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "상속됨" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "이 BOM 항목은 변형 부품의 BOM에 상속됩니다" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "변형 부품의 재고 항목을 이 BOM 항목에 사용할 수 있습니다" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "추적 가능한 부품의 수량은 정수여야 합니다" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "하위 부품을 지정해야 합니다" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "BOM 항목 대체품" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "대체 부품은 기준 부품과 같을 수 없습니다" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "상위 BOM 항목" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "대체 부품" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "부품 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "부품 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "관련 부품 선택" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "이 관계에 대한 메모" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "부품과 자기 자신 사이에는 부품 관계를 만들 수 없습니다" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "중복된 관계가 이미 존재합니다" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "상위 카테고리" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "상위 부품 카테고리" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "하위 카테고리" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "결과" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "이 템플릿에 대해 기록된 결과 수" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "이 재고 항목의 구매 통화" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "파일이 이미지가 아닙니다" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "원본 부품" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "복제할 원본 부품을 선택하세요" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "이미지 복사" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "원본 부품의 이미지를 복사합니다" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "BOM 복사" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "원본 부품의 자재 명세서(BOM)를 복사합니다" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "원본 부품의 매개변수 데이터를 복사합니다" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "메모 복사" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "원본 부품의 메모를 복사합니다" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "테스트 복사" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "원본 부품의 테스트 템플릿을 복사합니다" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "초기 재고 수량" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "이 부품의 초기 재고 수량을 지정하세요. 수량이 0이면 재고가 추가되지 않습니다." -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "초기 재고 위치" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "이 부품의 초기 재고 위치를 지정하세요" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "공급업체를 선택하세요(또는 비워 두고 건너뛰기)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "제조사를 선택하세요(또는 비워 두고 건너뛰기)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "제조사 부품 번호" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "선택한 회사는 유효한 공급업체가 아닙니다" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "선택한 회사는 유효한 제조사가 아닙니다" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "이 MPN과 일치하는 제조사 부품이 이미 존재합니다" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "이 SKU와 일치하는 공급업체 부품이 이미 존재합니다" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "카테고리 이름" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "제작 중" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "현재 생산 중인 이 부품의 수량" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "제작 예정인 이 부품의 미완료 수량" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "재고 항목" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "개정" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "총 재고" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "미할당 재고" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "변형 재고" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "부품 복제" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "다른 부품에서 초기 데이터를 복사합니다" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "초기 재고" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "초기 재고 수량과 함께 부품을 생성합니다" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "공급업체 정보" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "이 부품에 대한 초기 공급업체 정보를 추가합니다" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "카테고리 매개변수 복사" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "선택한 부품 카테고리의 매개변수 템플릿을 복사합니다" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "기존 이미지" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "기존 부품 이미지의 파일명" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "이미지 파일이 존재하지 않습니다" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "전체 자재 명세서(BOM) 검증" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "제작 가능" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "제작 주문에 필요" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "제작 주문에 할당됨" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "판매 주문에 필요" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "판매 주문에 할당됨" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "부품 IPN" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "부품 설명" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "재고 조사 정보를 생성할 부품을 선택하세요(및 모든 변형 부품)." -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "해당 카테고리(및 하위 카테고리)의 모든 부품을 포함할 카테고리를 선택하세요" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "해당 위치(하위 위치 포함)에 재고가 있는 모든 부품을 포함할 위치를 선택하세요" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "재고 조사 항목 생성" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "선택한 부품에 대한 재고 조사 항목을 저장합니다" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "보고서 생성" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "선택한 부품에 대한 재고 조사 보고서를 생성합니다" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "최소 가격" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "계산된 최소 가격 값을 재정의합니다" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "최소 가격 통화" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "최대 가격" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "계산된 최대 가격 값을 재정의합니다" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "최대 가격 통화" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "업데이트" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "이 부품의 가격 정보를 업데이트합니다" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "제공된 통화를 {default_currency}(으)로 변환할 수 없습니다" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "최소 가격은 최대 가격보다 클 수 없습니다" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "최대 가격은 최소 가격보다 작을 수 없습니다" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" -msgstr "수량은 0 이상이어야 합니다" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" +msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "상위 조립품을 선택하세요" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "구성 부품을 선택하세요" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "BOM을 복사할 부품을 선택하세요" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "기존 데이터 제거" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "복사하기 전에 기존 BOM 항목을 제거합니다" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "상속 항목 포함" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "템플릿 부품에서 상속된 BOM 항목 포함" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "잘못된 행 건너뛰기" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "이 옵션을 사용하면 잘못된 행을 건너뜁니다" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "대체 부품 복사" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOM 항목을 복제할 때 대체 부품도 복사" @@ -7099,15 +7204,15 @@ msgstr "할당할 수량" msgid "Label printing failed" msgstr "라벨 인쇄에 실패했습니다" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "라벨을 PDF로 렌더링하는 중 오류가 발생했습니다" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "라벨을 HTML로 렌더링하는 중 오류가 발생했습니다" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "인쇄할 항목이 제공되지 않았습니다" @@ -7168,7 +7273,7 @@ msgstr "바코드에 대한 기본 지원을 제공합니다" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "부품 변경 알림" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "부품 `{part.name}`에서 `{part_action}` 이벤트가 트리거되었습니다" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF 라벨 프린터" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "PDF 라벨 인쇄에 대한 기본 지원을 제공합니다" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "디버그 모드" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "디버그 모드를 활성화하면 PDF 대신 원본 HTML을 반환합니다" @@ -7568,7 +7673,7 @@ msgstr "테두리" msgid "Print a border around each label" msgstr "각 라벨 주위에 테두리를 인쇄합니다" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "가로" @@ -8029,7 +8134,7 @@ msgstr "플러그인이 라벨 인쇄를 지원하지 않습니다" msgid "Invalid label dimensions" msgstr "잘못된 라벨 크기입니다" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "템플릿에 유효한 항목이 제공되지 않았습니다" @@ -8073,112 +8178,112 @@ msgstr "인쇄 시 모델에 첨부" msgid "Save report output as an attachment against linked model instance when printing" msgstr "인쇄 시 보고서 출력물을 연결된 모델 인스턴스에 첨부파일로 저장합니다" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "파일명 패턴" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "파일명을 생성하기 위한 패턴" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "템플릿이 활성화됨" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "템플릿 대상 모델 유형" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "필터" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "템플릿 쿼리 필터(쉼표로 구분된 key=value 쌍 목록)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "템플릿 파일" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "PDF 보고서 페이지 크기" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "보고서를 가로 방향으로 렌더링" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "병합" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "선택한 항목에 대해 단일 보고서를 렌더링합니다" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "템플릿 {self.name}에서 생성된 보고서" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "템플릿 구문 오류" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "보고서 렌더링 오류" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "보고서 생성 오류" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "보고서 출력 병합 오류" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "너비 [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "라벨 너비(mm)" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "높이 [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "라벨 높이(mm)" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "라벨 인쇄 오류" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "스니펫" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "보고서 스니펫 파일" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "스니펫 파일 설명" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "자산" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "보고서 자산 파일" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "자산 파일 설명" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "시리얼 번호" @@ -8538,7 +8643,7 @@ msgstr "재고 위치 유형" msgid "Default icon for all locations that have no icon set (optional)" msgstr "아이콘이 설정되지 않은 모든 위치에 대한 기본 아이콘(선택)" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "재고 위치" @@ -8546,11 +8651,11 @@ msgstr "재고 위치" msgid "Stock Locations" msgstr "재고 위치" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "소유자" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "소유자 선택" @@ -8558,7 +8663,7 @@ msgstr "소유자 선택" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "재고 품목은 구조적 재고 위치에 직접 배치할 수 없으며, 하위 위치에 배치할 수 있습니다." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "외부" @@ -8578,274 +8683,282 @@ msgstr "이 위치의 재고 위치 유형" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "일부 재고 품목이 이미 이 위치에 있으므로 이 재고 위치를 구조적 위치로 만들 수 없습니다!" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "{field}이(가) 존재하지 않습니다" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "부품을 지정해야 합니다" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "재고 품목은 구조적 재고 위치에 배치할 수 없습니다!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "가상 부품에 대해 재고 품목을 생성할 수 없습니다" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "부품 유형('{self.supplier_part.part}')은(는) {self.part}여야 합니다" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "시리얼 번호가 있는 품목의 수량은 1이어야 합니다" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "수량이 1보다 크면 시리얼 번호를 설정할 수 없습니다" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "항목은 자기 자신에 속할 수 없습니다" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "is_building=True인 경우 항목에는 제조 참조가 있어야 합니다" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "제조 참조가 동일한 부품 객체를 가리키지 않습니다" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "상위 재고 품목" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "기본 부품" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "이 재고 품목에 맞는 공급업체 부품을 선택하세요" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "이 재고 품목은 어디에 있습니까?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "이 재고 품목이 보관된 포장재" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "설치 위치" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "이 항목이 다른 항목에 설치되어 있습니까?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "이 항목의 시리얼 번호" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "이 재고 품목의 배치 코드" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "재고 수량" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "원본 제조" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "이 재고 품목의 제조" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "소비한 대상" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "이 재고 품목을 소비한 제조 주문" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "원본 구매 주문" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "이 재고 품목의 구매 주문" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "대상 판매 주문" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "재고 품목의 유효기간입니다. 이 날짜 이후 재고는 만료로 간주됩니다" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "소진 시 삭제" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "재고가 소진되면 이 재고 품목을 삭제합니다" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "구매 시점의 단위 구매 가격" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "부품으로 변환됨" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "수량이 사용 가능한 재고를 초과합니다" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "부품이 추적으로 설정되어 있지 않습니다" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "수량은 정수여야 합니다" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "수량은 사용 가능한 재고 수량({self.quantity})을 초과할 수 없습니다" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "시리얼 번호는 목록으로 제공되어야 합니다" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "수량이 시리얼 번호와 일치하지 않습니다" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "구조적 위치에 재고를 할당할 수 없습니다" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "테스트 템플릿이 존재하지 않습니다" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "재고 품목이 판매 주문에 할당되었습니다" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "재고 품목이 다른 품목에 설치되어 있습니다" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "재고 품목에 다른 품목이 포함되어 있습니다" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "재고 품목이 고객에게 할당되었습니다" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "재고 품목이 현재 생산 중입니다" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "시리얼 추적 재고는 병합할 수 없습니다" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "중복 재고 품목" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "재고 품목은 동일한 부품을 참조해야 합니다" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "재고 항목은 동일한 공급업체 부품을 참조해야 합니다" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "재고 상태 코드는 일치해야 합니다" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "재고에 없으므로 재고 항목을 이동할 수 없습니다" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "재고 항목 추적" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "항목 메모" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "재고 항목 테스트 결과" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "이 테스트에는 값을 제공해야 합니다" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "이 테스트에는 첨부 파일을 업로드해야 합니다" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "이 테스트의 값이 올바르지 않습니다" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "테스트 결과" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "테스트 출력 값" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "테스트 결과 첨부 파일" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "테스트 메모" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "테스트 스테이션" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "테스트가 수행된 테스트 스테이션의 식별자" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "시작됨" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "테스트 시작 시각" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "완료됨" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "테스트 종료 시각" @@ -8929,7 +9042,7 @@ msgstr "새 항목의 일련 번호를 입력하세요" msgid "Supplier Part Number" msgstr "공급업체 부품 번호" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "만료됨" @@ -9466,131 +9579,131 @@ msgstr "토큰이 마지막으로 사용된 시간" msgid "Revoked" msgstr "취소됨" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "권한 세트" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "보기" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "항목을 볼 권한" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "추가" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "항목을 추가할 권한" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "변경" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "항목을 수정할 권한" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "삭제" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "항목을 삭제할 권한" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "봇" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "내부" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "게스트" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "언어" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "사용자의 선호 언어" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "테마" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "웹 UI 설정(JSON) - 수동으로 편집하지 마세요!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "위젯" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "대시보드 위젯 설정(JSON) - 수동으로 편집하지 마세요!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "표시 이름" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "사용자가 선택한 표시 이름" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "직책" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "주요 직함 또는 직책" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "사용자 상태 메시지" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "사용자 위치 정보" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "사용자가 시스템을 사용 중입니다" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "사용자가 선호하는 연락처 정보" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "사용자 유형" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "어떤 유형의 사용자입니까?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "조직" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "사용자의 기본 조직/소속" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "기본 그룹" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "사용자의 기본 그룹" diff --git a/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lt/LC_MESSAGES/django.po index 1578b0f5fe..fac3f7a446 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Lithuanian\n" "Language: lt_LT\n" @@ -89,6 +89,7 @@ msgstr "Nepavyko konvertuoti {original} į {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Pateiktas neteisingas kiekis" @@ -104,11 +105,11 @@ msgstr "Įveskite datą" msgid "Invalid decimal value" msgstr "Neteisinga dešimtainė reikšmė" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Ryšio klaida" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Serveris grąžino netinkamą būsenos kodą" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Įvyko išimtis" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Serveris grąžino neteisingą „Content-Length“ reikšmę" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Paveikslėlio dydis per didelis" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Paveikslėlio atsisiuntimas viršijo maksimalų leistiną dydį" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Nutolęs serveris grąžino tuščią atsakymą" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Nurodytas URL nėra tinkamas paveikslėlio failas" @@ -219,7 +220,7 @@ msgstr "Prisijungti prie programos" msgid "Email" msgstr "El. paštas" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Prieš atliekant bet kokius veiksmus, privalote įjungti dviejų veiksnių autentifikavimą." @@ -263,124 +264,108 @@ msgstr "Nuoroda turi atitikti reikalaujamą šabloną" msgid "Reference number is too large" msgstr "Nuorodos numeris per didelis" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Neteisingas pasirinkimas" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Pavadinimas" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Aprašymas" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Aprašymas (neprivalomas)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Kelias" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Po tuo pačiu pirminiu elementu negali būti pasikartojančių pavadinimų" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Pastabos su „Markdown“ (neprivalomas)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Brūkšninio kodo duomenys" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Trečiosios šalies brūkšninio kodo duomenys" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Brūkšninio kodo maiša" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Unikali brūkšninio kodo duomenų maiša\"" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Rastas esamas brūkšninis kodas" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Serverio klaida" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Serveris užfiksavo klaidą." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Turi būti teisingas skaičius" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valiuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Pasirinkite valiutą iš galimų variantų" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Neteisinga reikšmė" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Nutolęs paveikslėlis" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "Nutolusio paveikslėlio failo URL" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Paveikslėlių atsisiuntimas iš nutolusio URL neįjungtas" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Nepavyko atsisiųsti paveikslėlio iš nutolusio URL" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "Neteisingas fizinis vienetas" msgid "Not a valid currency code" msgstr "Netinkamas valiutos kodas" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Užsakymo būsena" @@ -561,21 +546,21 @@ msgstr "Užsakymo būsena" msgid "Parent Build" msgstr "Pirminė gamyba" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Įtraukti variantus" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Įtraukti variantus" msgid "Part" msgstr "Detalė" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -605,7 +590,7 @@ msgstr "Kategorija" msgid "Ancestor Build" msgstr "Ankstesnė gamyba" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Priskirta man" @@ -653,11 +638,11 @@ msgstr "Užbaigta prieš" msgid "Completed after" msgstr "Užbaigta po" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Minimali data" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Maksimali data" @@ -669,16 +654,16 @@ msgstr "Neįtraukti medžio struktūros" msgid "Build must be cancelled before it can be deleted" msgstr "Prieš ištrinant gamybą, ji turi būti atšaukta" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Sunaudojama" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Pasirinktinai" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Surinkimas" @@ -687,32 +672,32 @@ msgstr "Surinkimas" msgid "Tracked" msgstr "Sekama" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testuojama" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Liko neįvykdytų užsakymų" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Priskirta" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Užsakyta" @@ -720,7 +705,7 @@ msgstr "Užsakyta" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Gamybos užsakymas" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Vieta" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Gamybos užsakymo nuoroda" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Gamybos būsena" msgid "Build status code" msgstr "Gamybos būsenos kodas" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Partijos kodas" @@ -870,8 +855,8 @@ msgstr "Partijos kodas" msgid "Batch code for this build output" msgstr "Šios gamybos partijos kodas" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Sukūrimo data" @@ -891,7 +876,7 @@ msgstr "Tikslinė užbaigimo data" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Užbaigimo data" @@ -907,8 +892,8 @@ msgstr "Išdavė" msgid "User who issued this build order" msgstr "Vartotojas, kuris išdavė šį gamybos užsakymą" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Atsakingas" @@ -917,12 +902,12 @@ msgstr "Atsakingas" msgid "User or group responsible for this build order" msgstr "Vartotojas ar grupė, atsakinga už šį gamybos užsakymą" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Išorinė nuoroda" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Nuoroda į išorinį URL" @@ -934,8 +919,8 @@ msgstr "Gamybos prioritetas" msgid "Priority of this build order" msgstr "Šio gamybos užsakymo prioritetas" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Projekto kodas" @@ -968,7 +953,7 @@ msgstr "Gamybos užsakymas užbaigtas" msgid "Serial numbers must be provided for trackable parts" msgstr "Sekamoms detalėms būtina nurodyti serijos numerius" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nepateiktas gamybos rezultatas" @@ -980,47 +965,47 @@ msgstr "Gamybos rezultatas jau užbaigtas" msgid "Build output does not match Build Order" msgstr "Gamybos rezultatas neatitinka gamybos užsakymo" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Kiekis turi būti didesnis nei nulis" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Kiekis negali viršyti rezultato kiekio" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Gamybos užsakymo eilutės įrašas" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Gamybos objektas" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Gamybos objektas" msgid "Quantity" msgstr "Kiekis" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Reikalingas kiekis gamybos užsakymui" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Pasirinktas atsargų elementas neatitinka BOM eilutės" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Atsargoms su serijos numeriais kiekis turi būti 1" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Atsargų elementas per daug paskirstytas" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Atsargų elementas" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Šaltinio atsargų elementas" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Atsargų kiekis, skirtas paskirstyti į gamybą" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Įdiegti į" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Paskirties atsargų elementas" @@ -1099,7 +1084,7 @@ msgstr "Paskirties atsargų elementas" msgid "Build Level" msgstr "Gamybos lygis" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Detalės pavadinimas" @@ -1135,7 +1120,7 @@ msgstr "Sekamoms detalėms reikalingas sveikasis kiekis" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serijos numeriai" @@ -1156,8 +1141,8 @@ msgstr "Automatiškai priskirti serijos numerius" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatiškai priskirti reikalingas prekes su atitinkančiais serijos numeriais" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Šie serijos numeriai jau egzistuoja arba yra neteisingi" @@ -1245,7 +1230,7 @@ msgstr "Priimti, kad atsargos nebuvo visiškai priskirtos šiam gamybos užsakym msgid "Required stock has not been fully allocated" msgstr "Reikalingos atsargos nėra visiškai priskirtos" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Priimti nepilną" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part turi būti ta pati detalė kaip ir gamybos užsakyme" msgid "Item must be in stock" msgstr "Prekė turi būti atsargose" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Viršytas prieinamas kiekis ({q})" @@ -1306,7 +1291,7 @@ msgstr "Sekamų detalių priskyrymui turi būti nurodytas gamybos rezultatas" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Negalima nurodyti gamybos rezultato nesekamoms detalėms" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Turi būti pateikti paskirstymo elementai" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Gamyba" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Tiekėjo detalė" @@ -1404,7 +1389,7 @@ msgstr "Gamybos nuoroda" msgid "Part Category Name" msgstr "Detalės kategorijos pavadinimas" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Sekama" @@ -1412,29 +1397,29 @@ msgstr "Sekama" msgid "Inherited" msgstr "Paveldėta" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Leisti variantus" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "BOM elementas" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "Gamyboje" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Išorinės atsargos" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Prieinamos atsargos" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "Vartotojas neturi teisės ištrinti šių priedų" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Vartotojas neturi teisės ištrinti šio priedo" @@ -1554,610 +1543,634 @@ msgstr "Nėra papildinio" msgid "Project Code Label" msgstr "Projekto kodo etiketė" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Atnaujinta" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Paskutinio atnaujinimo laiko žymė" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Unikalus projekto kodas" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Projekto aprašymas" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Vartotojas arba grupė, atsakinga už šį projektą" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Nustatymo raktas" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Nustatymo reikšmė" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Pasirinkta reikšmė yra netinkama" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Reikšmė turi būti loginė (taip/ne)" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Reikšmė turi būti sveikasis skaičius" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Reikšmė turi būti tinkamas skaičius" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Reikšmė neatitinka patikros taisyklių" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Raktas turi būti unikalus" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Vartotojas" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Kiekio ribinis taškas kainai" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Kaina" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Vieneto kaina nurodytam kiekiui" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Galutinis taškas" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Galutinis taškas, kuriuo priimamas šis webhook'as" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Šio webhook'o pavadinimas" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktyvus" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Ar šis webhook'as aktyvus" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Raktas" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Prieigos raktas" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Slaptas raktas" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Bendras slaptas HMAC raktas" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Pranešimo ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Unikalus pranešimo identifikatorius" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Pagrindinis serveris" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Serveris, iš kurio gautas pranešimas" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Antraštė" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Šio pranešimo antraštė" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Turinys" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Šio pranešimo turinys" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Galutinis taškas, kuriame gautas pranešimas" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Apdorota" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Ar darbas su šiuo pranešimu baigtas?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "ID" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Pavadinimas" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Nuoroda" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Paskelbta" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autorius" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Santrauka" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Perskaityta" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Ar ši naujiena buvo perskaityta?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Paveikslėlio failas" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Modelio tipas, kuriam priskiriamas šis paveikslėlis" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "Modelio ID, kuriam priskiriamas šis paveikslėlis" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Pasirinktinis vienetas" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Vieneto simbolis turi būti unikalus" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Vieneto pavadinimas turi būti tinkamas identifikatorius" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Vieneto pavadinimas" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Simbolis" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Nebūtinas vieneto simbolis" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Apibrėžimas" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Vieneto apibrėžimas" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Priedas" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Trūksta failo" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Trūksta išorinės nuorodos" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Modelio tipas" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Modelio tipas, kuriam skirtas paveikslėlis" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Pasirinkite failą priedui" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Komentaras" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Komentaras prie priedo" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Įkėlimo data" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Failo įkėlimo data" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Failo dydis" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Failo dydis baitais" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Netinkamas modelio tipas priedui" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Pasirinktinė būsena" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Pasirinktinės būsenos" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Nuorodos būsenų rinkinys" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Būsenų rinkinys, papildomas šia pasirinktine būsena" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Loginis raktas" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Reikšmė" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "Skaitinė reikšmė, saugoma modelio duomenų bazėje" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Būsenos pavadinimas" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketė" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Etiketė, rodoma vartotojo sąsajoje" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Spalva" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Spalva, rodoma vartotojo sąsajoje" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Modelis" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Modelis, su kuriuo susieta būsena" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Turi būti pasirinktas modelis" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Turi būti pasirinktas raktas" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Turi būti pasirinktas loginis raktas" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "Raktas turi skirtis nuo loginio rakto" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Turi būti pateikta tinkama nuorodos būsenos klasė" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 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:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "Pavadinimas turi skirtis nuo nuorodos būsenų pavadinimų" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Pasirinkimų sąrašas" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Pasirinkimų sąrašai" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Pasirinkimų sąrašo pavadinimas" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Pasirinkimų sąrašo aprašymas" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Užrakinta" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Ar šis sąrašas užrakintas?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Ar šį pasirinkimų sąrašą galima naudoti?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Šaltinio papildinys" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Papildinys, pateikiantis šį pasirinkimų sąrašą" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Šaltinio eilutė" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "Neprivaloma eilutė, identifikuojanti šaltinį, naudotą šiam sąrašui" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Numatytasis įrašas" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Numatytasis šio pasirinkimų sąrašo įrašas" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Sukurta" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "Data ir laikas, kada buvo sukurtas pasirinkimų sąrašas" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Paskutinį kartą atnaujinta" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Pasirinkimų sąrašo įrašas" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Pasirinkimų sąrašo įrašai" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Pasirinkimų sąrašas, kuriam priklauso šis įrašas" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Pasirinkimų sąrašo įrašo reikšmė" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Pasirinkimų įrašo etiketė" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Pasirinkimų įrašo aprašymas" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Ar šis sąrašo įrašas aktyvus?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Parametro šablonas" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Žymimojo laukelio parametrai negali turėti matavimo vienetų" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Žymimojo laukelio parametrai negali turėti pasirinkimų" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Pasirinkimai turi būti unikalūs" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Parametro šablono pavadinimas turi būti unikalus" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Parametro pavadinimas" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Vienetai" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Fiziniai šio parametro vienetai" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Parametro aprašymas" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Žymimasis laukelis" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Ar šis parametras yra žymimasis laukelis?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Pasirinkimai" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Galimi pasirinkimai šiam parametrui (atskirti kableliais)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Pasirinkimų sąrašas šiam parametrui" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Įjungta" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Neteisingas pasirinkimas parametro reikšmei" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Šablonas" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Data" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Parametro reikšmė" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Parametro reikšmė" msgid "Note" msgstr "Pastaba" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Neprivalomas pastabų laukas" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Brūkšninio kodo nuskaitymas" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Brūkšninio kodo duomenys" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Vartotojas, nuskaitęs brūkšninį kodą" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Laiko žymė" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Brūkšninio kodo nuskaitymo data ir laikas" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "URL galutinis taškas, kuris apdorojo brūkšninį kodą" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Kontekstas" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Konteksto duomenys brūkšninio kodo nuskaitymui" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Atsakas" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Atsako duomenys iš brūkšninio kodo nuskaitymo" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Rezultatas" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "Ar brūkšninio kodo nuskaitymas buvo sėkmingas?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Raktas" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Gautos prekės" @@ -2457,7 +2470,7 @@ msgstr "Failo pavadinimas" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Modelio tipas" @@ -2601,13 +2614,13 @@ msgstr "Valiutų atnaujinimo intervalas" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dienos" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Naudotinas valiutų atnaujinimo papildinys" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Atsisiųsti iš URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Atsisiuntimo dydžio riba" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Didžiausias leistinas atsisiunčiamo paveikslėlio dydis" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "Naudojamas user-agent atsisiuntimui iš URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Griežtas URL tikrinimas" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Reikalauti schemos nurodymo tikrinant URL" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Atnaujinimų tikrinimo intervalas" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automatinė atsarginė kopija" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Įjungti automatinį duomenų bazės ir failų atsarginį kopijavimą" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Automatinio atsarginės kopijos kūrimo intervalas" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Nurodykite dienų skaičių tarp atsarginių kopijų kūrimo" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Užduočių ištrynimo intervalas" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Klaidų žurnalo ištrynimo intervalas" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Pranešimų ištrynimo intervalas" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Brūkšninių kodų palaikymas" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "Įjungti brūkšninių kodų skaitytuvo palaikymą žiniatinklio sąsajoje" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Išsaugoti brūkšninių kodų nuskaitymus" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "Brūkšninių kodų nuskaitymo rezultatus išsaugoti duomenų bazėje" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Maksimalus nuskaitymų skaičius" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "Maksimalus saugomų brūkšninių kodų nuskaitymų skaičius" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Brūkšninio kodo įvesties delsimas" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Brūkšninio kodo įvesties apdorojimo delsos laikas" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Brūkšninių kodų palaikymas per kamerą" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "Leisti brūkšninių kodų nuskaitymą per naršyklės kamerą" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Rodyti brūkšninio kodo duomenis" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Rodyti brūkšninio kodo duomenis naršyklėje kaip tekstą" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Brūkšninio kodo generavimo papildinys" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "Papildinys vidiniam brūkšninių kodų generavimui" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Detalių versijos" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Įjungti versijos lauką detalėms" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Tik surinkimo versijoms" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Leisti versijas tik surenkamoms detalėms" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Leisti pašalinti iš surinkimo" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "Leisti ištrinti detales, kurios yra naudojamos surinkimuose" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN reguliarioji išraiška" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Reguliariosios išraiškos šablonas detalių IPN tikrinimui" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Leisti pasikartojančius IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Leisti kelioms detalėms turėti tą patį IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Leisti redaguoti IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "Leisti keisti IPN reikšmę redaguojant detalę" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Kopijuoti detalės BOM duomenis" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopijuoti BOM duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Kopijuoti detalės parametrus" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopijuoti parametrų duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Kopijuoti detalės testavimo duomenis" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "Kopijuoti testavimo duomenis pagal nutylėjimą dubliuojant detalę" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Kopijuoti kategorijų parametrų šablonus" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "Kopijuoti kategorijų parametrų šablonus kuriant detalę" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Detalės pagal nutylėjimą yra šablonai" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponentas" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Galima įsigyti" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Detalės pagal nutylėjimą gali būti įsigyjamos" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Parduodama" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Detalės pagal nutylėjimą gali būti parduodamos" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Detalės pagal nutylėjimą gali būti sekamos" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuali" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Detalės pagal nutylėjimą yra virtualios" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Rodyti susijusias detales" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Rodyti susijusias detales pasirinktai detalei" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Pradiniai atsargų duomenys" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "Leisti sukurti pradinę atsargą pridedant naują detalę" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Pradiniai tiekėjo duomenys" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Detalės pavadinimo rodymo formatas" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Detalės pavadinimo rodymo formatas" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Detalės kategorijos numatytoji piktograma" -#: common/setting/system.py:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Mažiausias kainos dešimtainių skaičių kiekis" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Didžiausias kainos dešimtainių skaičių kiekis" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Naudoti tiekėjo kainas" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Įtraukti tiekėjų kainų lygius į bendrą kainodaros skaičiavimą" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Pirkimų istorija keičia kainas" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Istorinės pirkimo kainos pakeičia tiekėjo kainų lygius" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Naudoti atsargų kainas" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Atsargų kainų galiojimo trukmė" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Naudoti variantų kainas" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Įtraukti variantų kainas į bendrą kainodaros skaičiavimą" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Tik aktyvūs variantai" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "Naudoti tik aktyvius detalių variantus kainodarai" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Kainodaros atnaujinimo intervalas" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "Dienų skaičius iki automatinio detalių kainų atnaujinimo" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Vidinės kainos" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Įjungti vidines kainas detalėms" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Vidinės kainos viršenybė" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Įjungti etikečių spausdinimą" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Įjungti etikečių spausdinimą iš žiniatinklio sąsajos" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Etiketės vaizdo DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Įjungti ataskaitas" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Įjungti ataskaitų generavimą" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Derinimo režimas" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Generuoti ataskaitas derinimo režimu (HTML išvestis)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Registruoti ataskaitų klaidas" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Registruoti klaidas, įvykusias generuojant ataskaitas" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Puslapio dydis" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Numatytasis PDF ataskaitų puslapio dydis" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Reikalauti parametrų vienetų" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Globaliai unikalūs serijiniai numeriai" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "Atsargų serijos numeriai turi būti globaliai unikalūs" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Ištrinti išnaudotas atsargas" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "Nustato numatytą elgseną, kai atsargos yra išnaudotos" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Partijos kodo šablonas" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "Šablonas numatytiesiems atsargų partijos kodams generuoti" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Atsargų galiojimas" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Įjungti atsargų galiojimo funkcionalumą" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Parduoti pasibaigusias galioti atsargas" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Leisti parduoti pasibaigusias galioti atsargas" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Atsargų senėjimo laikas" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Naudoti pasibaigusias galioti atsargas gamyboje" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Leisti naudoti pasibaigusias galioti atsargas gamyboje" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Atsargų nuosavybės kontrolė" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Įjungti atsargų vietų ir vienetų nuosavybės kontrolę" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Atsargų vietos numatytoji piktograma" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Atsargų vietos numatytoji piktograma (tuščia reiškia nenaudojama)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Rodyti sumontuotas atsargas" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Rodyti sumontuotas atsargas atsargų lentelėse" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Tikrinti BOM montuojant atsargas" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Leisti perkelti neturimas atsargas" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Gamybos užsakymo nuorodos šablonas" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "Privalomas šablonas gamybos užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Reikalauti atsakingo savininko" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Kiekvienam užsakymui turi būti priskirtas atsakingas savininkas" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Reikalauti aktyvios detalės" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "Neleidžia kurti gamybos užsakymų neaktyvioms detalėms" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Reikalauti užrakintos detalės" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "Neleidžia kurti gamybos užsakymų neužrakintoms detalėms" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Reikalauti galiojančio komplektavimo sąrašo (BOM)" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Reikalauti uždarytų antrinių užsakymų" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokuoti, kol testai bus išlaikyti" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing 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:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Pirkimo užsakymo nuorodos šablonas" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "Būtinas šablonas pirkimo užsakymo nuorodos laukui generuoti" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Redaguoti užbaigtus pirkimo užsakymus" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Konvertuoti valiutą" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "Konvertuoti prekių vertę į pagrindinę valiutą priimant prekes" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Automatiškai užbaigti pirkimo užsakymus" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Įjungti pamiršto slaptažodžio funkciją" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Leisti naudoti pamiršto slaptažodžio funkciją prisijungimo puslapyje" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Įjungti registraciją" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "Leisti vartotojams savarankiškai registruotis prisijungimo puslapyje" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Įjungti vieningą prisijungimą (SSO)" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Įjungti vieningą prisijungimą (SSO) prisijungimo puslapyje" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Įjungti registraciją per SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Leisti vartotojams registruotis per SSO prisijungimo puslapyje" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Įjungti SSO grupių sinchronizavimą" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSO grupės raktas" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "SSO grupių susiejimas" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Pašalinti grupes, nepriklausančias SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "El. paštas privalomas" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Reikalauti vartotojo el. pašto registracijos metu" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Automatiškai užpildyti SSO naudotojų duomenis" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Įvesti el. paštą du kartus" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Įvesti slaptažodį du kartus" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "Registracijos metu prašyti vartotojų du kartus įvesti slaptažodį" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Leidžiami domenai" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Riboti registraciją tik tam tikriems domenams (atskiriama kableliais, prasideda @)" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Grupė registruojantis" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Reikalauti kelių veiksnių autentifikacijos (MFA)" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Vartotojai privalo naudoti kelių veiksnių apsaugą." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Tikrinti įskiepius paleidimo metu" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Tikrinti įskiepių atnaujinimus" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Įjungti periodinius įdiegtų įskiepių atnaujinimų tikrinimus" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Įjungti URL integravimą" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Leisti įskiepiams pridėti URL maršrutus" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Įjungti navigacijos integraciją" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Leisti įskiepiams integruotis į navigaciją" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Įjungti programų integraciją" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Leisti įskiepiams pridėti programas" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Įjungti planavimo integraciją" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Leisti įskiepiams vykdyti suplanuotas užduotis" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Įjungti įvykių integraciją" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Leisti įskiepiams reaguoti į vidinius įvykius" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Įjungti sąsajos integraciją" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Leisti įskiepiams integruotis į vartotojo sąsają" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Įjungti projektų kodus" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Įjungti projektų kodų naudojimą projektų sekimui" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Neįtraukti išorinių vietų" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Automatinės inventorizacijos periodas" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Rodyti pilnus vartotojų vardus" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Rodyti pilnus vardus vietoj vartotojo vardų" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Rodyti vartotojų profilius" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Rodyti vartotojų profilius jų paskyros puslapyje" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Įjungti bandymų stoties duomenis" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "Įjungti bandymų stoties duomenų rinkimą testų rezultatams" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "Paskutiniai naudoti spausdintuvai" msgid "Save the last used printing machines for a user" msgstr "Išsaugoti paskutinius naudotojo naudotus spausdintuvus" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "Vidinė detalė yra aktyvi" msgid "Supplier is Active" msgstr "Tiekėjas yra aktyvus" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Gamintojas" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Kontaktinis el. pašto adresas" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontaktinis asmuo" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adresas" @@ -4203,12 +4268,12 @@ msgstr "Siuntimo pastabos vidiniam naudojimui" msgid "Link to address information (external)" msgstr "Nuoroda į adreso informaciją (išorinė)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Gamintojo detalė" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Pagrindinė detalė" @@ -4221,8 +4286,8 @@ msgstr "Pasirinkite detalę" msgid "Select manufacturer" msgstr "Pasirinkite gamintoją" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN" @@ -4250,8 +4315,8 @@ msgstr "Pakuotės vienetų kiekis turi būti didesnis už nulį" msgid "Linked manufacturer part must reference the same base part" msgstr "Susieta gamintojo detalė turi nurodyti tą pačią pagrindinę detalę" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Tiekėjas" msgid "Select supplier" msgstr "Pasirinkite tiekėją" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Tiekėjo sandėlio numeris (SKU)" @@ -4290,15 +4355,15 @@ msgstr "Išorinės nuorodos į tiekėjo detalės URL" msgid "Supplier part description" msgstr "Tiekėjo detalės aprašymas" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "bazinė kaina" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalus mokestis (pvz., sandėliavimo mokestis)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Pakuotė" @@ -4315,7 +4380,7 @@ msgstr "Pakuotės kiekis" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "daugiklis" @@ -4339,23 +4404,23 @@ msgstr "Paskutinio prieinamumo duomenų atnaujinimo data" msgid "Supplier Price Break" msgstr "Tiekėjo kainos ribos" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Numatytoji valiuta, naudojama šiam tiekėjui" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Įmonės pavadinimas" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Sandėlyje" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Pradiniai eilutės duomenys" msgid "Errors" msgstr "Klaidos" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Galiojantis" @@ -4623,7 +4688,7 @@ msgstr "Etiketės spausdinamų kopijų skaičius" msgid "Connected" msgstr "Prijungta" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Nežinoma" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupė" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Užsakymo nuoroda" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Neįvykdyta" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Turi projekto kodą" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Sukūrė" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Sukurta prieš" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Sukurta po" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Turi pradžios datą" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Pradžios data prieš" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Pradžios data po" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Turi tikslinę datą" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Tikslinė data prieš" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Tikslinė data po" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Turi kainodarą" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Užbaigta prieš" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Užbaigta po" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Užsakymas" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Užsakymas įvykdytas" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Vidinė detalė" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Užsakymas laukia vykdymo" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Užbaigta" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Turi siuntą" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Pirkimo užsakymas" msgid "Sales Order" msgstr "Pardavimo užsakymas" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Bendra kaina" msgid "Total price for this order" msgstr "Bendra kaina už šį užsakymą" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Užsakymo valiuta" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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ą)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Užsakymo aprašymas (neprivalomas)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Pasirinkite projekto kodą šiam užsakymui" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Nuoroda į išorinį puslapį" @@ -4930,7 +4995,7 @@ msgstr "Pradžios data" msgid "Scheduled start date for this order" msgstr "Numatyta pradžios data šiam užsakymui" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Tikslinė data" @@ -4963,12 +5028,12 @@ msgstr "Kontaktinis asmuo šiam užsakymui" msgid "Company address for this order" msgstr "Įmonės adresas šiam užsakymui" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Užsakymo nuoroda" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Būsena" @@ -4992,15 +5057,15 @@ msgstr "Tiekėjo užsakymo nuorodos kodas" msgid "received by" msgstr "gavo" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Data, kada užsakymas buvo užbaigtas" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Paskirties vieta" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Paskirties vieta gautoms prekėms" @@ -5024,616 +5089,624 @@ msgstr "Kiekis turi būti teigiamas skaičius" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klientas" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Įmonė, kuriai prekės parduodamos" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Pardavimo užsakymo būsena" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Kliento nuoroda" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Kliento užsakymo nuorodos kodas" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Siuntos data" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "išsiuntė" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Užsakymas jau baigtas" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Užsakymas jau atšauktas" -#: order/models.py:1459 +#: order/models.py:1463 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:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "Užsakymas užrakintas ir negali būti keičiamas" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Prekės kiekis" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Eilutės įrašo nuoroda" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Eilutės įrašo pastabos" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Eilutės įrašo aprašymas (neprivalomas)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Papildomas kontekstas šiai eilutei" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Vieneto kaina" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Pirkimo užsakymo eilutės įrašas" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Tiekėjo detalė turi atitikti tiekėją" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Tiekėjo detalė" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Gauta" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Gautų prekių kiekis" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Pirkimo kaina" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Vieneto pirkimo kaina" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Pirkimo užsakymo papildoma eilutė" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Pardavimo užsakymo eilutės įrašas" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Pardavimo kaina" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Vieneto pardavimo kaina" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Išsiųsta" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Išsiųstas kiekis" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Pardavimo užsakymo siunta" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Siuntos data" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Pristatymo data" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Siuntos pristatymo data" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Patikrino" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Vartotojas, patikrinęs šią siuntą" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Siunta" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Siuntos numeris" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Sekimo numeris" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Siuntos sekimo informacija" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Sąskaitos faktūros numeris" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Nuorodos numeris susijusiai sąskaitai faktūrai" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Siunta jau buvo išsiųsta" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Siunta neturi priskirtų prekių" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Pardavimo užsakymo papildoma eilutė" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Pardavimo užsakymo paskirstymas" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Prekė nėra priskirta" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "Negalima priskirti prekių eilutei su skirtinga detale" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Negalima priskirti prekių eilutei, jei joje nėra detalės" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Priskiriamas kiekis negali viršyti atsargų kiekio" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Priskirtas kiekis turi būti didesnis nei nulis" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Kiekis turi būti 1, jei prekė turi serijos numerį" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Pardavimo užsakymas nesutampa su siunta" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Siunta nesutampa su pardavimo užsakymu" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Eilutė" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Pardavimo užsakymo siuntos nuoroda" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Prekė" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Pasirinkite atsargų elementą priskyrimui" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Įveskite prekių priskyrimo kiekį" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Grąžinimo užsakymo nuoroda" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Įmonė, iš kurios grąžinamos prekės" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Grąžinimo užsakymo būsena" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "Turi būti nurodytas atsargų elementas" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "Grąžinamo kiekis viršija prekių kiekį" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "Grąžinamo kiekis turi būti daugiau nei nulis" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Neteisingas kiekis serijinio numerio prekei" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Pasirinkite prekę grąžinimui iš kliento" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Gavimo data" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Rezultatas" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Rezultatas šiam eilutės įrašui" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Grąžinimo užsakymo papildoma eilutė" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "Užsakymo ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "Užsakymo, kurį reikia dubliuoti, ID" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Kopijuoti eilutes" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Kopijuoti eilutės įrašus iš pradinio užsakymo" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Kopijuoti papildomas eilutes" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Kopijuoti papildomas eilutes iš pradinio užsakymo" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Kopijuoti parametrus" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Užbaigtos eilutės" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Dubliuoti užsakymą" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Nurodykite užsakymo dubliavimo parinktis" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Neteisingas užsakymo ID" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Tiekėjo pavadinimas" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Užsakymo atšaukti negalima" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 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:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "Užsakyme yra neužbaigtų eilutės įrašų" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Užsakymas nėra atidarytas" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Automatinis kainų nustatymas" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Pirkimo kainos valiuta" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Sujungti elementus" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Vidinis detalės numeris" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Vidinis detalės pavadinimas" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Turi būti nurodyta tiekėjo detalė" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Turi būti nurodytas pirkimo užsakymas" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Tiekėjas turi atitikti pirkimo užsakymą" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Pirkimo užsakymas turi atitikti tiekėją" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Eilutės įrašas" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Pasirinkite paskirties vietą gautiems elementams" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Įveskite partijos kodą gaunamoms atsargoms" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Galiojimo data" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "Įveskite galiojimo datą gaunamoms atsargoms" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Įveskite gaunamų atsargų serijos numerius" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Pakeisti gaunamų atsargų pakavimo informaciją" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Papildoma pastaba gaunamoms atsargoms" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Brūkšninis kodas" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Nuskaitytas brūkšninis kodas" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Brūkšninis kodas jau naudojamas" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Turi būti pateikti eilutės įrašai" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Turi būti nurodyta paskirties vieta" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Pateiktos brūkšninių kodų reikšmės turi būti unikalios" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Siuntos" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Užbaigtos siuntos" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Pardavimo kainos valiuta" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Paskirstyti elementai" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Nepateikta siuntos informacija" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 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:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Kiekis turi būti teigiamas" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Įveskite priskiriamus serijos numerius" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Siunta jau išsiųsta" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Siunta nėra susieta su šiuo užsakymu" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Nerasta atitikmenų šiems serijos numeriams" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Šie serijos numeriai nepasiekiami" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Grąžinimo užsakymo eilutės įrašas" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Eilutės įrašas neatitinka grąžinimo užsakymo" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Eilutės įrašas jau gautas" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Grąžinamas kiekis" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Eilutės kainos valiuta" @@ -5756,59 +5829,63 @@ msgstr "Yra versija" msgid "Has Revisions" msgstr "Turi versijų" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "BOM galiojantis" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "Surinkimo detalė gali būti testuojama" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Komponento detalė gali būti testuojama" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Naudoja" @@ -5821,7 +5898,7 @@ msgstr "Detalių kategorija" msgid "Part Categories" msgstr "Detalių kategorijos" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Numatytoji vieta" @@ -5849,7 +5926,7 @@ msgstr "Numatytieji raktažodžiai detalėms šioje kategorijoje" msgid "Icon" msgstr "Piktograma" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Piktograma (neprivaloma)" @@ -5870,984 +5947,1012 @@ msgstr "Numatytoji reikšmė" msgid "Default Parameter Value" msgstr "Numatytoji parametro reikšmė" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Detalės" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Negalima ištrinti šios detalės, nes ji užrakinta" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Negalima ištrinti šios detalės, nes ji vis dar aktyvi" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Negalima ištrinti šios detalės, nes ji naudojama sirinkime" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Detalė „{self}“ negali būti naudojama detalių sąraše „{parent}“ (rekursyviai)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Detalė „{parent}“ naudojama detalių sąraše „{self}“ (rekursyviai)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN turi atitikti regex šabloną {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "Detalė negali būti savo pačios versija" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Versijos leidžiamos tik surinkimo detalėms" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Negalima sukurti šabloninės detalės versijos" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "Pagrindinė detalė turi būti susieta su tuo pačiu šablonu" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Atsargų elementas su šiuo serijos numeriu jau egzistuoja" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "IPN dublikatų detalių nustatymuose naudoti negalima" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "Tokia detalės versija jau egzistuoja." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Detalė su tokiu pavadinimu, IPN ir versija jau egzistuoja." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Detalės negali būti priskirtos struktūrinėms detalių kategorijoms!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Detalės pavadinimas" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Yra šablonas" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Ar ši detalė yra šabloninė detalė?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Ar ši detalė yra kitos detalės variantas?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variantas iš" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Detalės aprašymas (neprivalomas)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Raktažodžiai" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Detalės raktažodžiai, skirti pagerinti matomumą paieškos rezultatuose" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Detalės kategorija" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Detalės versija arba numeris" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Versija" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Ar ši detalė yra kitos detalės versija?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Versija iš" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Kur ši detalė paprastai laikoma?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Numatytasis galiojimo laikas" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "Šios detalės atsargų galiojimo laikas (dienomis)" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimalus atsargų kiekis" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Mažiausias leidžiamas atsargų kiekis" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Šios detalės matavimo vienetai" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Ar ši detalė gali būti pagaminta iš kitų detalių?" -#: part/models.py:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Ar ši detalė turi unikalių vienetų sekimą?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "Ar šiai detalei gali būti priskirti bandymų rezultatai?" -#: part/models.py:1272 +#: part/models.py:1282 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:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Ar ši detalė gali būti parduodama klientams?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Ar ši detalė yra aktyvi?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Užrakintos detalės negali būti redaguojamos" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "BOM kontrolinė suma" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Išsaugota BOM kontrolinė suma" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Detalių sąrašą patikrino" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Detalių sąrašo patikrinimo data" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Sukūręs vartotojas" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Atsakingas vartotojas už šią detalę" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Parduodamas kiekis" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Valiuta, naudojama kainų skaičiavimams kaupti" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Minimali BOM kaina" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Minimali komponentų detalių kaina" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Maksimali BOM kaina" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Maksimali komponentų detalių kaina" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Minimali pirkimo kaina" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Mažiausia istorinė pirkimo kaina" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Maksimali pirkimo kaina" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Didžiausia istorinė pirkimo kaina" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Minimali vidinė kaina" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Mažiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Maksimali vidinė kaina" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Didžiausia kaina pagal vidinius kainų intervalus" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Mažiausia tiekėjo kaina" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Mažiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Didžiausia tiekėjo kaina" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Didžiausia detalės kaina iš išorinių tiekėjų" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Mažiausia varianto kaina" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Apskaičiuota minimali variantų detalių kaina" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Didžiausia varianto kaina" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Apskaičiuota didžiausia variantų detalių kaina" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Minimali kaina" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Nepaisyti minimalios kainos" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Maksimali kaina" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Nepaisyti maksimalios kainos" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Apskaičiuota bendra minimali kaina" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Apskaičiuota bendra maksimali kaina" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Minimali pardavimo kaina" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Mažiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Didžiausia pardavimo kaina pagal kainų intervalus" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Mažiausia pardavimo kaina" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Mažiausia istorinė pardavimo kaina" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Didžiausia pardavimo kaina" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Didžiausia istorinė pardavimo kaina" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Detalė inventorizacijai" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Vienetų skaičius" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Atsargų įrašų skaičius inventorizacijos metu" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Bendras prieinamas atsargų kiekis inventorizacijos metu" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Data" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Inventorizacijos atlikimo data" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Minimali atsargų kaina" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Apytikslė minimali turimų atsargų kaina" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Maksimali atsargų kaina" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Apytikslė maksimali turimų atsargų kaina" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Detalės kainų intervalai pardavimui" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Detalės bandymų šablonas" -#: part/models.py:3655 +#: part/models.py:3665 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:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "Bandymų šablonus galima kurti tik testuojamoms detalėms" -#: part/models.py:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Bandymo pavadinimas" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Įveskite bandymo pavadinimą" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Bandymo raktas" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Supaprastintas bandymo raktas" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Bandymo aprašymas" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Įveskite šio bandymo aprašymą" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Ar šis bandymas įjungtas?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Privalomas" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Ar šį bandymą būtina išlaikyti?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Reikalauja reikšmės" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Reikalauja priedo" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Galimi pasirinkimai šiam bandymui (atskirti kableliais)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM elemento keisti negalima - surinkimas užrakintas" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM elemento keisti negalima - varianto surinkimas užrakintas" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Pasirinkite pirminę detalę" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Pavaldi detalė" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Pasirinkite detalę, naudojamą BOM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "BOM reikalingas šios detalės kiekis" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Šis BOM elementas yra pasirenkamas" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "BOM nuoroda" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "BOM pastabos" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Kontrolinė suma" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "BOM eilutės kontrolinė suma" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Patvirtinta" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Šis BOM elementas patvirtintas" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Paveldima" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Šį BOM elementą paveldi variantų sąrašai" -#: part/models.py:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "Sekamoms detalėms kiekis turi būti sveikasis skaičius" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Turi būti nurodyta pavaldi detalė" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "BOM elemento pakaitalas" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Pagrindinis BOM elementas" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Pakaitinė detalė" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Detalė 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Detalė 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Pasirinkite susijusią detalę" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Pastaba šiam ryšiui" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Toks ryšys jau egzistuoja" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Pagrindinė kategorija" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Pagrindinė detalių kategorija" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Subkategorijos" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Rezultatai" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Rezultatų skaičius, susietas su šiuo šablonu" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Šio atsargų elemento pirkimo valiuta" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "Failas nėra paveikslėlis" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Pradinė detalė" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Pasirinkite pradinę detalę kopijavimui" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Kopijuoti paveikslėlį" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Kopijuoti paveikslėlį iš pradinės detalės" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Kopijuoti BOM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Kopijuoti komplektavimo žiniaraštį iš pradinės detalės" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Kopijuoti parametrų duomenis iš pradinės detalės" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Kopijuoti pastabas" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Kopijuoti pastabas iš pradinės detalės" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Pradinis atsargų kiekis" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Pradinė atsargų vieta" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Nurodykite pradinę atsargų vietą šiai detalei" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Pasirinkite tiekėją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Pasirinkite gamintoją (arba palikite tuščią, jei nenorite nurodyti)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Gamintojo detalės numeris" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Pasirinkta įmonė nėra galiojantis tiekėjas" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Pasirinkta įmonė nėra galiojantis gamintojas" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Detalė su šiuo gamintojo numeriu (MPN) jau egzistuoja" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Tiekėjo detalė su šiuo SKU jau egzistuoja" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Kategorijos pavadinimas" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Surinkimas" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Atsargos" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Versijos" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Bendros atsargos" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Nepriskirtos atsargos" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Variantų atsargos" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Kopijuoti detalę" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Kopijuoti pradinius duomenis iš kitos detalės" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Pradinės atsargos" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Sukurti detalę su pradiniu atsargų kiekiu" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Tiekėjo informacija" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Pridėti pradinę tiekėjo informaciją šiai detalei" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Kopijuoti kategorijos parametrus" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Kopijuoti parametrų šablonus iš pasirinktos detalių kategorijos" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Esamas paveikslėlis" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Esamos detalės paveikslėlio failo pavadinimas" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Paveikslėlio failas neegzistuoja" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Patvirtinti visą komplektavimo žiniaraštį" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Galima surinkti" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Mažiausia kaina" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Pakeisti apskaičiuotą mažiausią kainą" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Mažiausios kainos valiuta" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Didžiausia kaina" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Pakeisti apskaičiuotą didžiausią kainą" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Didžiausios kainos valiuta" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Atnaujinti" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Atnaujinti šios detalės kainodarą" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Nepavyko konvertuoti iš nurodytų valiutų į {default_currency}" -#: part/serializers.py:1560 +#: part/serializers.py:1549 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:1563 +#: part/serializers.py:1552 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:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Pasirinkite pirminį surinkimą" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Pasirinkite komponentinę detalę" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Pasirinkite detalę, iš kurios kopijuoti BOM" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Pašalinti esamus duomenis" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Pašalinti esamus BOM elementus prieš kopijuojant" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Įtraukti paveldėtus" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "Įtraukti BOM elementus, paveldėtus iš šabloninių detalių" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Praleisti netinkamas eilutes" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Įjunkite šią parinktį, jei norite praleisti netinkamas eilutes" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Kopijuoti pakaitines detales" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopijuoti pakaitines detales, kai kopijuojami BOM elementai" @@ -7099,15 +7204,15 @@ msgstr "Kiekis, kurį reikia priskirti" msgid "Label printing failed" msgstr "Etiketės spausdinimas nepavyko" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Klaida generuojant etiketę į PDF formatą" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Klaida generuojant etiketę į HTML formatą" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Nenurodyta jokių elementų spausdinimui" @@ -7168,7 +7273,7 @@ msgstr "Suteikia vietinį brūkšninių kodų palaikymą" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "Pranešimas apie pakeistą detalę" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "Detalei `{part.name}` įvyko `{part_action}` įvykis" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF etikečių spausdintuvas" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Suteikia vidinį palaikymą PDF etikečių spausdinimui" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Derinimo režimas" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Įjungti derinimo režimą - grąžina neapdorotą HTML vietoje PDF" @@ -7568,7 +7673,7 @@ msgstr "Rėmelis" msgid "Print a border around each label" msgstr "Spausdinti rėmelį aplink kiekvieną etiketę" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Gulsčias" @@ -8029,7 +8134,7 @@ msgstr "Įskiepis nepalaiko etikečių spausdinimo" msgid "Invalid label dimensions" msgstr "Neleistini etiketės matmenys" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Šablonui nepateikti galimi elementai" @@ -8073,112 +8178,112 @@ msgstr "Pridėti prie modelio spausdinant" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Išsaugoti ataskaitą kaip priedą susietam modelio egzemplioriui spausdinimo metu" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Failo vardo šablonas" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Šablonas failų vardų generavimui" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Šablonas įjungtas" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "Šablonui skirtas modelio tipas" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtrai" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Šablono užklausos filtrai (kableliais atskirtas key=value porų sąrašas)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Šablono failas" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Puslapio dydis PDF ataskaitoms" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Rodyti ataskaitą gulsčiai" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Ataskaita sugeneruota iš šablono {self.name}" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "Klaida generuojant ataskaitą" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Plotis [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Etiketės plotis, nurodytas milimetrais" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Aukštis [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Etiketės aukštis, nurodytas milimetrais" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "Klaida spausdinant etiketes" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Fragmentas" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Ataskaitos fragmento failas" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Fragmento failo aprašymas" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Išteklius" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Ataskaitos ištekliaus failas" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Ištekliaus failo aprašymas" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serijos numeris" @@ -8538,7 +8643,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Atsargų vieta" @@ -8546,11 +8651,11 @@ msgstr "Atsargų vieta" msgid "Stock Locations" msgstr "Atsargų vietos" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Savininkas" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Pasirinkite savininką" @@ -8558,7 +8663,7 @@ msgstr "Pasirinkite savininką" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Atsargos negali būti tiesiogiai patalpintos į struktūrines atsargų vietas, bet gali būti patalpinti į jų sub-vietas." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Išorinė" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Turi būti nurodyta detalė" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "Atsargos negali būti patalpintos į struktūrines atsargų vietas!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Atsargų elementas negali būti sukurtas virtualioms detalėms" -#: stock/models.py:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Elementas negali priklausyti pats sau" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Surinkimo nuoroda nenurodo į tą pačią detalę" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Pirminis atsargų elementas" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Pagrindinė detalė" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "Pasirinkite atitinkančią tiekėjo detalę šiam atsargų elementui" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Kur yra šis atsargų elementas?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Pakuotė, kurioje laikomas šis atsargų elementas" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Sumontuotas į" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Ar šis elementas yra sumontuotas kitame elemente?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Šio elemento serijos numeris" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Šio atsargų elemento partijos kodas" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Atsargų kiekis" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Surinkimo šaltinis" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Surinkimas šiam atsargų elementui" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Sunaudojo" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Gamybos užsakymas, kuris sunaudojo šį atsargų elementą" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Pirkimo užsakymo šaltinis" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Pirkimo užsakymas šiam atsargų elementui" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Pardavimo užsakymo paskirtis" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Ištrinti išnaudojus" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Ištrinti šį atsargų elementą, kai atsargos bus išnaudotos" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Vieneto pirkimo kaina pirkimo metu" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Konvertuota į detalę" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Detalė nenustatyta kaip sekama" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Kiekis turi būti sveikasis skaičius" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Serijos numeriai turi būti pateikti sąraše" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Kiekis nesutampa su serijos numeriais" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Bandomasis šablonas neegzistuoja" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Atsargų elementas buvo priskirtas pardavimo užsakymui" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Atsargų elementas sumontuotas kitame elemente" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Atsargų elementas turi kitų elementų" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Atsargų elementas buvo priskirtas klientui" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Atsargų elementas šiuo metu gaminamas" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Su serijos numeriais pažymėtų atsargų sujungti negalima" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Pasikartojantys atsargų elementai" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Atsargų elementai turi būti susiję su ta pačia detale" -#: stock/models.py:2106 +#: stock/models.py:2130 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:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Atsargų būsenos kodai turi sutapti" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "Atsargų elemento sekimas" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Įrašo pastabos" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "Atsargų elemento bandymo rezultatas" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Šiam bandymui turi būti pateikta reikšmė" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Šiam bandymui turi būti įkeltas priedas" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "Netinkama reikšmė šiam bandymui" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Bandymo rezultatas" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Bandymo išvesties reikšmė" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Bandymo rezultato priedas" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Bandymo pastabos" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Bandymų stotis" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "Bandymų stoties identifikatorius, kurioje atliktas bandymas" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Pradėta" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "Bandymo pradžios laiko žyma" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Pabaigta" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "Bandymo pabaigos laiko žyma" @@ -8929,7 +9042,7 @@ msgstr "Įveskite serijos numerius naujiems elementams" msgid "Supplier Part Number" msgstr "Tiekėjo detalės numeris" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Nebegaliojantis" @@ -9466,131 +9579,131 @@ msgstr "Paskutinis rakto naudojimo laikas" msgid "Revoked" msgstr "Atšauktas" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Leidimų rinkinys" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Peržiūra" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Leidimas peržiūrėti objektus" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Pridėti" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Leidimas pridėti objektus" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Keisti" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Leidimas redaguoti objektus" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Ištrinti" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Leidimas ištrinti objektus" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "Botas" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Vidinis" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Svečias" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Kalba" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Pageidaujama vartotojo kalba" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Tema" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Žiniatinklio sąsajos nustatymai (JSON formatu) - neredaguoti rankiniu būdu!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Valdikliai" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "Prietaisų skydelio valdiklių nustatymai (JSON formatu) - neredaguoti rankiniu būdu!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Rodomas vardas" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Pasirinktas vartotojo rodomas vardas" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Pareigos" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "Pagrindinės pareigos arba darbo pavadinimas" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Vartotojo būsenos žinutė" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "Vartotojo buvimo vietos informacija" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "Vartotojas aktyviai naudoja sistemą" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "Pageidaujama vartotojo kontaktinė informacija" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Vartotojo tipas" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "Kokio tipo tai vartotojas?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Organizacija" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "Pagrindinė vartotojo organizacija / priklausomybė" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Pagrindinė grupė" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "Pagrindinė vartotojo grupė" diff --git a/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/lv/LC_MESSAGES/django.po index 8a81f92378..c52edb68aa 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Latvian\n" "Language: lv_LV\n" @@ -89,6 +89,7 @@ msgstr "Nevarēja konvertēt {original} par {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Norādītais daudzums nav derīgs" @@ -104,11 +105,11 @@ msgstr "Ievadiet datumu" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Savienojuma kļūda" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Serveris atbildēja ar nederīgu statusa kodu" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Radās izņēmums" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Serveris atbildēja ar nederīgu Content-Length vērtību" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Attēla izmērs ir pārāk liels" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Attēla lejupielāde pārsniedz maksimālo izmēru" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Attālais serveris atgrieza tukšu atbildi" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Norādītajā URL nav derīgs attēla fails" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 -msgid "Model type" -msgstr "" - -#: common/models.py:1997 -msgid "Target model type for image" -msgstr "" - -#: common/models.py:2005 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:2021 -msgid "Comment" +#: common/models.py:2019 +msgid "No file attached to rename" msgstr "" #: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 +msgid "Model type" +msgstr "" + +#: common/models.py:2072 +msgid "Target model type for image" +msgstr "" + +#: common/models.py:2080 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:2096 +msgid "Comment" +msgstr "" + +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/nl/LC_MESSAGES/django.po index 8ae4cbb31d..d57e77b082 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:09\n" "Last-Translator: \n" "Language-Team: Dutch\n" "Language: nl_NL\n" @@ -89,6 +89,7 @@ msgstr "{original} kon niet worden omgezet naar {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Ongeldige hoeveelheid ingevoerd" @@ -104,11 +105,11 @@ msgstr "Voer datum in" msgid "Invalid decimal value" msgstr "Ongeldige decimale waarde" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "Ongeldige URL: hostnaam kon niet worden opgelost" msgid "URL points to a private or reserved IP address" msgstr "URL-punten naar een privé of gereserveerd IP-adres" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "Te veel doorverwijzingen" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Verbindingsfout" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Server reageerde met ongeldige statuscode" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Uitzondering opgetreden" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Server reageerde met ongeldige Content-Length waarde" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Afbeeldingsformaat is te groot" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Beelddownload overschrijdt de maximale grootte" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Externe server heeft lege reactie teruggegeven" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Opgegeven URL is geen geldig afbeeldingsbestand" @@ -219,7 +220,7 @@ msgstr "Log in op de app" msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Schakel tweestapsverificatie in voordat je iets anders kunt doen." @@ -263,124 +264,108 @@ msgstr "Referentie moet overeenkomen met verplicht patroon" msgid "Reference number is too large" msgstr "Referentienummer is te groot" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Ongeldige keuze" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Naam" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Omschrijving" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Omschrijving (optioneel)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Pad" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Dubbele namen kunnen niet bestaan onder hetzelfde bovenliggende object" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown notitie (optioneel)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Streepjescode gegevens" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Streepjescode van derden" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hash van Streepjescode" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Unieke hash van barcode gegevens" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Bestaande barcode gevonden" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Serverfout" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Er is een fout gelogd door de server." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Moet een geldig nummer zijn" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Selecteer valuta uit beschikbare opties" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Dit veld mag niet nul zijn." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Ongeldige waarde" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Externe afbeelding" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL van extern afbeeldingsbestand" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Afbeeldingen van externe URL downloaden is niet ingeschakeld" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Fout bij het downloaden van afbeelding van externe URL" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Ongeldig inhoudstype" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "Inhoudstype niet gevonden" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "Content type komt niet overeen met de vereiste mixin klasse" @@ -552,8 +537,8 @@ msgstr "Ongeldige fysieke eenheid" msgid "Not a valid currency code" msgstr "Geen geldige valutacode" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Status van bestelling" @@ -561,21 +546,21 @@ msgstr "Status van bestelling" msgid "Parent Build" msgstr "Bovenliggende Productie" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Inclusief varianten" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Inclusief varianten" msgid "Part" msgstr "Onderdeel" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -605,7 +590,7 @@ msgstr "Categorie" msgid "Ancestor Build" msgstr "Voorouderlijke bouw" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Toegewezen aan mij" @@ -653,11 +638,11 @@ msgstr "Voltooid voor" msgid "Completed after" msgstr "Voltooid na" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Min. datum" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Max. datum" @@ -669,16 +654,16 @@ msgstr "Boomstructuur uitsluiten" msgid "Build must be cancelled before it can be deleted" msgstr "Productie moet geannuleerd worden voordat het kan worden verwijderd" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Verbruiksartikelen" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Optioneel" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Samenstelling" @@ -687,32 +672,32 @@ msgstr "Samenstelling" msgid "Tracked" msgstr "Gevolgd" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testbaar" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Openstaande order" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Toegewezen" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Verbruikt" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "In bestelling" @@ -720,7 +705,7 @@ msgstr "In bestelling" msgid "Build not found" msgstr "Build niet gevonden" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Productieorder" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Locatie" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Uitvoer" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Productieorderreferentie" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Productiestatus" msgid "Build status code" msgstr "Productiestatuscode" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchcode" @@ -870,8 +855,8 @@ msgstr "Batchcode" msgid "Batch code for this build output" msgstr "Batchcode voor deze productieuitvoer" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Aanmaakdatum" @@ -891,7 +876,7 @@ msgstr "Verwachte opleveringsdatum" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Opleveringsdatum" @@ -907,8 +892,8 @@ msgstr "Uitgegeven door" msgid "User who issued this build order" msgstr "Gebruiker die de productieorder heeft gegeven" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Verantwoordelijke" @@ -917,12 +902,12 @@ msgstr "Verantwoordelijke" msgid "User or group responsible for this build order" msgstr "Gebruiker of groep verantwoordelijk voor deze bouwopdracht" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Externe Link" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link naar externe URL" @@ -934,8 +919,8 @@ msgstr "Bouw prioriteit" msgid "Priority of this build order" msgstr "Prioriteit van deze bouwopdracht" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Project code" @@ -968,7 +953,7 @@ msgstr "Een productieorder is voltooid" msgid "Serial numbers must be provided for trackable parts" msgstr "Serienummers moeten worden opgegeven voor traceerbare onderdelen" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Geen productie uitvoer opgegeven" @@ -980,47 +965,47 @@ msgstr "Productie uitvoer is al voltooid" msgid "Build output does not match Build Order" msgstr "Productuitvoer komt niet overeen met de Productieorder" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Hoeveelheid moet groter zijn dan nul" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Hoeveelheid kan niet groter zijn dan aantal" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "Build output heeft niet alle vereiste tests doorstaan" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "Voorraadproducten zijn nog in productie" -#: build/models.py:1219 +#: build/models.py:1221 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:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Bouw order regel item" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Bouw object" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Bouw object" msgid "Quantity" msgstr "Hoeveelheid" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Vereiste hoeveelheid voor bouwopdracht" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Aantal van verbruikte voorraad" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Geselecteerde voorraadartikelen komen niet overeen met de BOM-regel" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "Toegewezen hoeveelheid moet groter zijn dan nul" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerde voorraad" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Voorraad item is te veel toegewezen" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Voorraadartikel" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Bron voorraadartikel" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Voorraad hoeveelheid toe te wijzen aan productie" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Installeren in" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Bestemming voorraadartikel" @@ -1099,7 +1084,7 @@ msgstr "Bestemming voorraadartikel" msgid "Build Level" msgstr "Bouw level" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Onderdeel naam" @@ -1135,7 +1120,7 @@ msgstr "Hoeveelheid als geheel getal vereist voor traceerbare onderdelen" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummers" @@ -1156,8 +1141,8 @@ msgstr "Serienummers automatisch toewijzen" msgid "Automatically allocate required items with matching serial numbers" msgstr "Vereiste artikelen automatisch toewijzen met overeenkomende serienummers" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "De volgende serienummers bestaan al of zijn ongeldig" @@ -1245,7 +1230,7 @@ msgstr "Accepteer dat voorraadartikelen niet volledig zijn toegewezen aan deze p msgid "Required stock has not been fully allocated" msgstr "Vereiste voorraad is niet volledig toegewezen" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Accepteer Onvolledig" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part moet naar hetzelfde onderdeel wijzen als de productieorder msgid "Item must be in stock" msgstr "Artikel moet op voorraad zijn" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Beschikbare hoeveelheid ({q}) overschreden" @@ -1306,7 +1291,7 @@ msgstr "Productieuitvoer moet worden opgegeven voor de toewijzing van gevolgde o 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Allocaties voor artikelen moeten worden opgegeven" @@ -1386,9 +1371,9 @@ msgstr "Instaleeren Op" msgid "Build" msgstr "Bouwen" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leveranciersonderdeel" @@ -1404,7 +1389,7 @@ msgstr "Bouw referentie" msgid "Part Category Name" msgstr "Naam categorie onderdeel" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Volgbaar" @@ -1412,29 +1397,29 @@ msgstr "Volgbaar" msgid "Inherited" msgstr "Overgenomen" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Varianten toestaan" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Stuklijstartikel" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "In productie" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Gepland om te bouwen" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Externe voorraad" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Beschikbare Voorraad" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "Gebruiker heeft geen toestemming om deze bijlagen te verwijderen" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Gebruiker heeft geen toestemming om deze bijlage te verwijderen." @@ -1554,610 +1543,634 @@ msgstr "Geen plug-in gevonden" msgid "Project Code Label" msgstr "Projectcode label" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Bijgewerkt" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Tijdstempel van laatste update" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Bijgewerkt door" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Gebruiker die dit object voor het laatst heeft bijgewerkt" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Unieke projectcode" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Projectbeschrijving" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Gebruiker of groep die verantwoordelijk is voor dit project" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Instellingen" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Instellingswaarde" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Gekozen waarde is geen geldige optie" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Waarde moet een booleaanse waarde zijn" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Waarde moet een geheel getal zijn" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Waarde moet een geldig getal zijn" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Waarde is niet geldig voor validatiecontrole" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Sleutelreeks moet uniek zijn" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Gebruiker" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Prijs pauze hoeveelheid" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Prijs" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Stukprijs op opgegeven hoeveelheid" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Eindpunt" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Eindpunt waarop deze webhook wordt ontvangen" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Naam van deze webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Actief" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Is deze webhook actief" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Sleutel" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token voor toegang" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Geheim" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Gedeeld geheim voor HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Bericht ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Host" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Host waarvan dit bericht is ontvangen" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Koptekst" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Koptekst van dit bericht" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Berichtinhoud" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Inhoud van dit bericht" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Eindpunt waarop dit bericht is ontvangen" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Aan gewerkt" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Is het werk aan dit bericht voltooid?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Titel" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Koppeling" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Gepubliceerd" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Auteur" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Samenvatting" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Gelezen" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Is dit nieuwsitem gelezen?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Afbeelding" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Doel type voor deze afbeelding" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "Doel modelnummer voor deze afbeelding" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Aangepaste eenheid" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Eenheid symbool moet uniek zijn" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Naam van de unit moet een geldig id zijn" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Naam van eenheid" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Symbool" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Optionele eenheid symbool" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definitie" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definitie van eenheid" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Bijlage" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Ontbrekend bestand" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Externe link ontbreekt" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Model type" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Doel type voor afbeelding" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Bestand als bijlage selecteren" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Opmerking" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Opmerking van bijlage" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Uploaddatum" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Datum waarop het bestand is geüpload" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Bestandsgrootte" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Bestandsgrootte in bytes" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ongeldig modeltype opgegeven voor bijlage" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Aangepaste staat" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Aangepaste statussen" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Referentie status set" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Status set die met deze aangepaste status wordt uitgebreid" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logische sleutel" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Waarde" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "De numerieke waarde die wordt opgeslagen in de modellendatabase" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Naam van de toestand" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Label" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Label dat in de frontend getoond wordt" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Kleur" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Kleur die in de frontend getoond wordt" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Model" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Model met deze staat is gekoppeld aan" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Het model moet worden gekozen" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Sleutel moet worden geselecteerd" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Logische sleutel moet worden geselecteerd" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "Sleutel moet anders zijn dan logische sleutel" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Geldige referentie status klasse moet worden opgegeven" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 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:2206 +#: common/models.py:2281 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:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Keuzelijst" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Selectielijst" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Naam van de selectielijst" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Beschrijving van de selectielijst" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Vergrendeld" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Is deze selectielijst vergrendeld?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Kan deze selectielijst worden gebruikt?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Bron plug-in" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Plug-in die de selectielijst biedt" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Bron tekenreeks" -#: common/models.py:2287 +#: common/models.py:2362 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:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Standaard vermelding" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Standaard vermelding voor deze selectielijst" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Gecreëerd" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "Datum en tijd waarop de selectielijst is aangemaakt" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Laatst bijgewerkt" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Selectielijst item" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Selectielijst item" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Selectielijst waaraan dit item hoort" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Naam van de selectielijst" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Label voor het item in de selectielijst" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Beschrijving van het item in de selectielijst" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Is dit item in deze lijst actief?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Parameter sjabloon" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "Parameter sjablonen" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parameters kunnen geen eenheden bevatten" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Keuzes moeten uniek zijn" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "De template van de parameter moet uniek zijn" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "Doelmodeltype voor dit parametersjabloon" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Parameternaam" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Eenheden" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Fysieke eenheden voor deze parameter" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Parameter omschrijving" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Selectievakje" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Is deze parameter een selectievak?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Keuzes" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Lijst met selecties voor deze parameter" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Ingeschakeld" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "Is dit parametersjabloon ingeschakeld?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "Parameter" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "Parameters" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Ongeldige keuze voor parameter waarde" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Ongeldig modeltype opgegeven voor parameter" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "Model-ID" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "ID van het doelmodel voor deze parameter" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Sjabloon" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "Parameter sjabloon" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Gegevens" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Parameterwaarde" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Parameterwaarde" msgid "Note" msgstr "Opmerking" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Optioneel notities veld" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Barcode Scan" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Barcode gegevens" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Gebruiker die de barcode gescand heeft" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Tijdstempel" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Datum en tijd van de streepjescode scan" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "Adres eindpunt dat de streepjescode verwerkt" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Inhoud" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Contextgegevens voor de barcode scan" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Reactie" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Reactiegegevens van de barcode scan" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Resultaat" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "Was de barcode succesvol gescand?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Er is een fout opgetreden" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "E-mailbericht" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "E-mail berichten" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Aangekondigd" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Verzonden" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Mislukt" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Geleverd" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Bevestigd" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Inkomend" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Uitgaand" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Geen antwoord" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Track levering" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Track gelezen" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Track Klik" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "Globaal ID" -#: common/models.py:3096 +#: common/models.py:3171 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:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "Discussie ID" -#: common/models.py:3105 +#: common/models.py:3180 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:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Gesprek" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Gekoppeld onderwerp voor dit bericht" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "Prioriteit" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "E-mail gesprekken" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "E-mail gesprekken" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Sleutel" -#: common/models.py:3183 +#: common/models.py:3258 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:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Unieke identificatie voor dit bericht" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Intern gestart" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Is dit onderwerp intern gestart?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Datum en tijd waarop de conversatie voor het laatst is bijgewerkt" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Ontvangen items" @@ -2457,7 +2470,7 @@ msgstr "Bestandsnaam" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Model type" @@ -2601,13 +2614,13 @@ msgstr "Valuta update interval" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dagen" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Munteenheid update plug-in om te gebruiken" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Download van URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Download limiet" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Maximale downloadgrootte voor externe afbeelding" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "User-agent gebruikt om te downloaden van URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Strikte URL validatie" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Vereis schema specificatie bij het valideren van URLs" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Interval voor update" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automatische backup" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Automatische back-up van database- en mediabestanden inschakelen" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Automatische backup interval" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Geef het aantal dagen op tussen geautomatiseerde backup" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Interval Taak Verwijderen" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Error Log Verwijderings Interval" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Interval Verwijderen Notificatie" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "E-mail verwijderen interval" -#: common/setting/system.py:363 +#: common/setting/system.py:343 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:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "Bescherm e-maillogboeken" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "Voorkom het verwijderen van e-mail logs" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Streepjescodeondersteuning" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "Schakel barcodescanner ondersteuning in in de webinterface" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Sla de resultaten van de barcode op" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "Sla de barcode scan resultaten op in de database" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Maximale aantal Barcode Scans" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "Maximum aantal resultaten van de barcode scan op te slaan" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Barcode Invoer Vertraging" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Barcode invoerverwerking vertraging" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Barcode Webcam Ondersteuning" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "Barcode via webcam scannen in browser toestaan" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Barcode gegevens" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Geef barcode gegevens weer in browser als tekst" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Streepjescode Plug-in" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "Plug-in om te gebruiken voor interne barcode data genereren" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Herzieningen onderdeel" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Revisieveld voor onderdeel inschakelen" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Alleen assemblee revisie" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Alleen revisies toestaan voor assemblageonderdelen" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Verwijderen uit Assemblage toestaan" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN Regex" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulier expressiepatroon voor het overeenkomende Onderdeel IPN" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Duplicaat IPN toestaan" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Toestaan dat meerdere onderdelen dezelfde IPN gebruiken" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Bewerken IPN toestaan" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Kopieer Onderdeel Stuklijstgegevens" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "Kopieer standaard stuklijstgegevens bij het dupliceren van een onderdeel" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Kopieer Onderdeel Parametergegevens" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Kopieer Onderdeel Testdata" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Kopiëer Categorieparameter Sjablonen" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "Kopieer categorieparameter sjablonen bij het aanmaken van een onderdeel" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Onderdelen zijn standaard sjablonen" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "Onderdelen kunnen standaard vanuit andere componenten worden samengesteld" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Onderdeel" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "Onderdelen kunnen standaard worden gebruikt als subcomponenten" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Koopbaar" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Onderdelen kunnen standaard gekocht worden" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Verkoopbaar" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Onderdelen kunnen standaard verkocht worden" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Onderdelen kunnen standaard gevolgd worden" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtueel" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Onderdelen zijn standaard virtueel" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Verwante onderdelen tonen" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Verwante onderdelen voor een onderdeel tonen" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Initiële voorraadgegevens" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Initiële leveranciergegevens" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Onderdelennaam Weergaveopmaak" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Opmaak om de onderdeelnaam weer te geven" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Standaardicoon voor onderdeel catagorie" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "Standaardicoon voor onderdeel catagorie (leeg betekent geen pictogram)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Minimaal aantal prijs decimalen" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Maximum prijs decimalen" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Gebruik leveranciersprijzen" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Prijsvoordelen leveranciers opnemen in de totale prijsberekening" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Aankoopgeschiedenis overschrijven" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historische order prijzen overschrijven de prijzen van de leverancier" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Gebruik voorraaditem prijzen" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Gebruik prijzen van handmatig ingevoerde voorraadgegevens voor prijsberekeningen" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Voorraad artikelprijs leeftijd" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Gebruik variantprijzen" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Variantenprijzen opnemen in de totale prijsberekening" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Alleen actieve varianten" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "Gebruik alleen actieve variantonderdelen voor het berekenen van variantprijzen" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Prijzen automatisch bijwerken" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "Automatisch prijzen van onderdelen bijwerken wanneer interne gegevens veranderen" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Prijzen Herbouw interval" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Interne Prijzen" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Inschakelen van interne prijzen voor onderdelen" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Interne prijs overschrijven" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "Indien beschikbaar, interne prijzen overschrijven berekeningen van prijsbereik" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "BOM Zero Quantity toestaan" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Printen van labels Inschakelen" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Printen van labels via de webinterface inschakelen" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Label Afbeelding DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Activeer Rapportages" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Activeer het genereren van rapporten" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Foutopsporingsmodus" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Rapporten genereren in debug modus (HTML uitvoer)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Log fouten" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Registreer fouten die optreden bij het genereren van rapporten" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Paginagrootte" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapporten" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Forceer Parameter Eenheden" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Globaal unieke serienummers" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummers voor voorraaditems moeten globaal uniek zijn" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Verwijder uitgeputte voorraad" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "Bepaalt standaard gedrag wanneer een voorraadartikel leeg is" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Batchcode Sjabloon" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "Sjabloon voor het genereren van standaard batchcodes voor voorraadartikelen" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Verlopen Voorraad" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Verlopen voorraad functionaliteit inschakelen" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Verkoop Verlopen Voorraad" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Verkoop verlopen voorraad toestaan" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Voorraad Vervaltijd" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Produceer Verlopen Voorraad" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Sta productie met verlopen voorraad toe" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Voorraad Eigenaar Toezicht" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Eigenaarstoezicht over voorraadlocaties en items inschakelen" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Voorraadlocatie standaard icoon" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Standaard locatie pictogram (leeg betekent geen icoon)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Geïnstalleerde voorraad items weergeven" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Geïnstalleerde voorraadartikelen in voorraadtabellen tonen" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Controleer BOM bij het installeren van items" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Sta 'Niet op voorraad overschrijving' toe" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Productieorderreferentiepatroon" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "Vereist patroon voor het genereren van het Bouworderreferentieveld" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Vereis verantwoordelijke eigenaar" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Een verantwoordelijke eigenaar moet worden toegewezen aan elke bestelling" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Vereist een actief onderdeel" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "Voorkom het maken van orders voor inactieve onderdelen" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Vergrendeld onderdeel vereisen" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "Voorkom het maken van orders voor ontgrendelde onderdelen" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Vereist een geldige BOM" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Onderliggende bestellingen vereist" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Externe Bouw Orders" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Inschakelen externe build order functionaliteit" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokkeren tot test geslaagd" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Verkooporders gemarkeerd als verzonden zullen automatisch worden voltooid, zonder de status \"verzonden\"" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Inkooporderreferentiepatroon" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "Vereist patroon voor het genereren van het Inkooporderreferentieveld" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Bewerk voltooide verkooporders" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Valuta converteren" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "Verander artikelwaarde naar basisvaluta bij het ontvangen van voorraad" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Inkooporders automatisch voltooien" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Wachtwoord vergeten functie inschakelen" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Wachtwoord vergeten functie inschakelen op de inlogpagina's" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Registratie inschakelen" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "Zelfregistratie voor gebruikers op de inlogpagina's inschakelen" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "SSO inschakelen" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "SSO inschakelen op de inlogpagina's" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Schakel gebruikersregistratie met SSO in" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "SSO-groep synchroniseren inschakelen" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSO groep sleutel" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "SSO groep kaart" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Verwijder groepen buiten SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "E-mailadres verplicht" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Vereis gebruiker om e-mailadres te registreren bij aanmelding" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "SSO-gebruikers automatisch invullen" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "Gebruikersdetails van SSO-accountgegevens automatisch invullen" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "E-mail twee keer" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "Bij inschrijving gebruikers twee keer om hun e-mail vragen" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Wachtwoord tweemaal" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Toegestane domeinen" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Inschrijven beperken tot bepaalde domeinen (komma-gescheiden, beginnend met @)" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Groep bij aanmelding" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "MFA afdwingen" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Gebruikers moeten multifactor-beveiliging gebruiken." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 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:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Controleer plugins bij het opstarten" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Controleren op plug-in updates" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 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:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Activeer URL-integratie" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Plugins toestaan om URL-routes toe te voegen" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Activeer navigatie integratie" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Plugins toestaan om te integreren in navigatie" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Activeer app integratie" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Activeer plug-ins om apps toe te voegen" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Activeer planning integratie" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Activeer plugin om periodiek taken uit te voeren" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Activeer evenement integratie" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Activeer plugin om op interne evenementen te reageren" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Interface integratie activeren" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Plug-ins inschakelen om te integreren in de gebruikersinterface" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "E-mail integratie inschakelen" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Schakel plug-ins in om uitgaande / inkomende mails te verwerken" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Activeer project codes" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Schakel projectcodes in voor het bijhouden van projecten" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "Voorraadcontrole inschakelen" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 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:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Externe locaties uitsluiten" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Voorraadartikelen op externe locaties uitsluiten van voorraadberekeningen" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Automatische Voorraadcontrole Periode" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "Aantal dagen tussen automatische voorraadgegevens opnemen" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "Oude voorraadgegevens verwijderen" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "Voorraadgegevens verwijderen die ouder zijn dan het opgegeven aantal dagen" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "Interval Voorraadgegevens verwijderen" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 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:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "Oude voorraadgegevens verwijderen" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "Inverval voor verwijderen van voorraadtracking" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Gebruikers volledige namen weergeven" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Laat gebruikers volledige namen zien in plaats van gebruikersnamen" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Gebruikersprofielen tonen" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Toon gebruikersprofielen op hun profielpagina" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Inschakelen van teststation data" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "Schakel teststation gegevensverzameling in voor testresultaten" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "Machine Ping inschakelen" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 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" @@ -3951,6 +4008,14 @@ msgstr "Laatst gebruikte printer" msgid "Save the last used printing machines for a user" msgstr "Sla de laatst gebruikte printer op voor een gebruiker" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "Alle modellen" @@ -4012,8 +4077,8 @@ msgstr "Intern onderdeel is actief" msgid "Supplier is Active" msgstr "Leverancier is actief" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Fabrikant" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Contact e-mailadres" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Contact" @@ -4111,7 +4176,7 @@ msgstr "Btw-nr" msgid "Company Tax ID" msgstr "BTW-nummer van bedrijf" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adres" @@ -4203,12 +4268,12 @@ msgstr "Verzend notities voor intern gebruik" msgid "Link to address information (external)" msgstr "Link naar adres gegevens (extern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabrikant onderdeel" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Basis onderdeel" @@ -4221,8 +4286,8 @@ msgstr "Onderdeel selecteren" msgid "Select manufacturer" msgstr "Fabrikant selecteren" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "Fabrikant artikel nummer" @@ -4250,8 +4315,8 @@ msgstr "Hoeveelheid moet groter zijn dan nul" msgid "Linked manufacturer part must reference the same base part" msgstr "Gekoppeld fabrikant onderdeel moet verwijzen naar hetzelfde basis onderdeel" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Leverancier" msgid "Select supplier" msgstr "Leverancier selecteren" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Voorraad beheers eenheid voor leveranciers" @@ -4290,15 +4355,15 @@ msgstr "URL voor link externe leveranciers onderdeel" msgid "Supplier part description" msgstr "Omschrijving leveranciersdeel" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "basisprijs" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimale kosten (bijv. voorraadkosten)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Verpakking" @@ -4315,7 +4380,7 @@ msgstr "Pakket hoeveelheid" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "meerdere" @@ -4339,23 +4404,23 @@ msgstr "Datum van de laatste update van de beschikbaarheid gegevens" msgid "Supplier Price Break" msgstr "Prijsverschil van leverancier" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Standaardvaluta die gebruikt wordt voor deze leverancier" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Bedrijfsnaam" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Op voorraad" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "Prijsverschillen" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Oorspronkelijke rij gegevens" msgid "Errors" msgstr "Fouten" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Geldig" @@ -4623,7 +4688,7 @@ msgstr "Aantal afdrukken voor elk label" msgid "Connected" msgstr "Verbonden" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Onbekend" @@ -4727,7 +4792,7 @@ msgstr "Sleutel van de eigenschap" msgid "Value of the property" msgstr "Waarde van de eigenschap" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Groep" @@ -4751,117 +4816,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:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Order Referentie" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Uitmuntend" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Heeft een projectcode" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Aangemaakt Door" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Gemaakt vóór" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Gemaakt na" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Heeft vervaldatum" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Vervaldatum voor" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Vervaldatum na" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Heeft doel datum" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Doel datum voor" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Doel datum na" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "Bijgewerkt voor" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "Bijgewerkt na" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Heeft prijsstelling" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Voltooid voor" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Voltooid na" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Externe Bouw Opdracht" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Bestellen" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Bestelling voltooid" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Intern onderdeel" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Bestelling in behandeling" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Voltooid" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Heeft verzending" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Inkooporder" msgid "Sales Order" msgstr "Verkooporder" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Totaalprijs" msgid "Total price for this order" msgstr "Totaalprijs van deze bestelling" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Valuta bestelling" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "Adres komt niet overeen met het geselecteerde bedrijf" msgid "Order description (optional)" msgstr "Bestelling beschrijving (optioneel)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Selecteer projectcode voor deze bestelling" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Link naar externe pagina" @@ -4930,7 +4995,7 @@ msgstr "Start datum" msgid "Scheduled start date for this order" msgstr "Geplande startdatum voor deze bestelling" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Streefdatum" @@ -4963,12 +5028,12 @@ msgstr "Contactpunt voor deze volgorde" msgid "Company address for this order" msgstr "Bedrijf adres voor deze bestelling" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Orderreferentie" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Status" @@ -4992,15 +5057,15 @@ msgstr "Order referentiecode van leverancier" msgid "received by" msgstr "ontvangen door" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Order voltooid op datum" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Bestemming" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Bestemming voor ontvangen items" @@ -5024,617 +5089,625 @@ msgstr "Hoeveelheid moet een positief getal zijn" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klant" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Bedrijf waaraan de artikelen worden verkocht" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Verkooporder status" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Klantreferentie " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Klant order referentiecode" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Verzenddatum" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "verzonden door" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Bestelling is al afgerond" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Order is al geannuleerd" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Alleen een open bestelling kan als voltooid worden gemarkeerd" -#: order/models.py:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "De bestelling is vergrendeld en kan niet worden gewijzigd" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Hoeveelheid artikelen" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Artikelregel referentie" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Artikel notities" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Regelomschrijving (optioneel)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Additionele context voor deze regel" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Stukprijs" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Inkooporder regel item" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Leveranciersonderdeel moet overeenkomen met leverancier" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "Bouw bestelling moet worden gemarkeerd als extern" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "Bestellingen kunnen alleen aan assemblageonderdelen worden gekoppeld" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "De bouw van het order deel moet overeenkomen met regel onderdeel" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Leveranciersonderdeel" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Ontvangen" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Aantal ontvangen artikelen" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Inkoopprijs" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Aankoopprijs per stuk" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "Externe Build Order moet aan deze regel voldoen" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Extra regel inkooporder" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Verkooporder regel item" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "Alleen verkoopbare onderdelen kunnen aan een verkooporder worden toegewezen" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Verkoopprijs" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Prijs per stuk" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Verzonden" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Verzonden hoeveelheid" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Verzending van verkooporder" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "Verzendadres moet overeenkomen met de klant" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "Verzendadres voor deze zending" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Datum van verzending" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Leveringsdatum" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Datum van levering van zending" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Gecontroleerd door" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Gebruiker die deze zending gecontroleerd heeft" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Zending" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Zendingsnummer" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Volgnummer" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Zending volginformatie" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Factuurnummer" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Referentienummer voor bijbehorende factuur" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Verzending is al verzonden" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Zending heeft geen toegewezen voorraadartikelen" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "Verzending moet worden gecontroleerd voordat deze kan worden voltooid" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Verkooporder extra regel" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Toewijzing verkooporder" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Voorraadartikel is niet toegewezen" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Kan voorraad niet toewijzen aan een regel zonder onderdeel" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Toewijzingshoeveelheid kan niet hoger zijn dan de voorraadhoeveelheid" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Toewijzing hoeveelheid moet groter zijn dan nul" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Hoeveelheid moet 1 zijn voor geserialiseerd voorraadartikel" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Verkooporder komt niet overeen met zending" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Verzending komt niet overeen met verkooporder" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Regel" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Verzendreferentie verkooporder" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Artikel" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Selecteer voorraadartikel om toe te wijzen" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Voer voorraadtoewijzingshoeveelheid in" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Retour order referentie" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Bedrijf van waaruit items worden teruggestuurd" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Retour bestelling status" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Retourneer bestelregel item" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "Voorraad item moet worden opgegeven" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "Retour hoeveelheid overschrijdt voorraad hoeveelheid" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "Het retour aantal moet groter zijn dan nul" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Ongeldige hoeveelheid voor geserialiseerde voorraad" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Selecteer te retourneren product van de klant" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Ontvangst datum" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "De datum waarop dit retour item is ontvangen" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Resultaat" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Resultaat van deze regel item" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Retourneren extra regel" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "Bestelling ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID van de bestelling om te dupliceren" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Kopieer regels" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Kopieer regelitems uit de oorspronkelijke bestelling" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Extra regels kopiëren" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Extra regelitems van de oorspronkelijke bestelling kopiëren" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Parameters kopiëren" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Afgeronde regel items" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Artikel dupliceren" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Specificeer opties voor het dupliceren van deze bestelling" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Ongeldige order ID" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Leveranciers Naam" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Order kan niet worden geannuleerd" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Toestaan order te sluiten met onvolledige regelitems" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "Bestelling heeft onvolledige regelitems" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Order is niet open" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Automatisch prijzen" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Koopprijs automatisch berekenen gebaseerd op leveranciers \n" " onderdelen gegevens" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Valuta Inkoopprijs" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Items samenvoegen" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Intern Onderdeelnummer" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Interne naam onderdeel" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Leveranciersonderdeel moet worden gespecificeerd" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Inkooporder moet worden gespecificeerd" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "De leverancier moet overeenkomen met de inkooporder" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Inkooporder moet overeenkomen met de leverancier" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Artikel" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Selecteer bestemmingslocatie voor ontvangen artikelen" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Voer batch code in voor inkomende voorraad items" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Vervaldatum" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "Voer vervaldatum in voor inkomende voorraad items" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Voer serienummers in voor inkomende voorraadartikelen" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Overschrijf verpakkingsinformatie voor binnenkomende voorraad" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Extra opmerking voor inkomende voorraad items" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Streepjescode" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Gescande streepjescode" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Streepjescode is al in gebruik" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Artikelen moeten worden opgegeven" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Bestemmingslocatie moet worden opgegeven" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Geleverde streepjescodewaarden moeten uniek zijn" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Verzendingen" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Voltooide Verzendingen" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "Toegewezen lijnen" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Valuta verkoopprijs" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Toegewezen items" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Geen verzenddetails opgegeven" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Artikelregel is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Hoeveelheid moet positief zijn" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Voer serienummers in om toe te wijzen" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Verzending is al verzonden" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Zending is niet gekoppeld aan deze bestelling" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Geen overeenkomst gevonden voor de volgende serienummers" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "De volgende serienummers zijn niet beschikbaar" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Retourneer regel item" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Artikelregel komt niet overeen met inkooporder" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Regel item is al ontvangen" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "Artikelen kunnen alleen worden ontvangen tegen lopende bestellingen" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Hoeveelheid te retourneren" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Lijn prijs valuta" @@ -5757,59 +5830,63 @@ msgstr "Is revisie" msgid "Has Revisions" msgstr "Heeft revisies" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "BOM Valid" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "Cascade Categorieën" -#: part/api.py:963 +#: part/api.py:980 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:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Filter op numerieke categorie-ID of de letterlijke 'null'" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "Bouw onderdeel is actief" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "Bouw onderdeel is te volgen" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "Assemblage deel is testbaar" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "Onderdeel is actief" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "Onderdeel is trackable" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Component onderdeel is testbaar" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "Onderdeel is nog te bouwen" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "Onderdeel is virtueel" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "Heeft beschikbare voorraad" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Gebruik" @@ -5822,7 +5899,7 @@ msgstr "Onderdeel Categorie" msgid "Part Categories" msgstr "Onderdeel Categorieën" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Standaard locatie" @@ -5850,7 +5927,7 @@ msgstr "Standaard trefwoorden voor delen in deze categorie" msgid "Icon" msgstr "Pictogram" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Pictogram (optioneel)" @@ -5871,984 +5948,1012 @@ msgstr "Standaard waarde" msgid "Default Parameter Value" msgstr "Standaard Parameter Waarde" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Onderdelen" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Kan parameters van een vergrendeld onderdeel niet verwijderen" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Kan de parameters van een vergrendeld onderdeel niet wijzigen" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Kan dit deel niet verwijderen omdat het vergrendeld is" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Kan dit deel niet verwijderen omdat het nog actief is" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Kan dit deel niet verwijderen omdat het in een groep gebruikt is" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "{self}' kan niet worden gebruikt in BOM voor '{parent}' (recursief)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "{parent}' wordt gebruikt in BOM voor '{self}' (recursief)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN moet overeenkomen met regex patroon {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "Onderdeel kan geen herziening van zichzelf zijn" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Herzieningen zijn alleen toegestaan voor assemblageonderdelen" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Kan geen revisie maken van een sjabloon onderdeel" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "Bovenliggend onderdeel moet naar dezelfde sjabloon verwijzen" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Voorraadartikel met dit serienummer bestaat al" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Dubbele IPN niet toegestaan in deelinstellingen" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "Dubbele onderdeel revisie bestaat al." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Onderdeel met deze naam, IPN en Revisie bestaat al." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Onderdelen kunnen niet worden toegewezen aan categorieën van structurele onderdelen!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Onderdeel naam" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Is een sjabloon" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Is dit deel van een sjabloon?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Is dit een variant van een ander deel?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variant van" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Beschrijving (optioneel)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Sleutelwoorden" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Deel sleutelwoorden om de zichtbaarheid van de zoekresultaten te verbeteren" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Onderdeel Categorie" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Onderdeel revisie of versienummer" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revisie" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Is dit deel een herziening van een ander deel?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Revisie van" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Waar wordt dit item normaal opgeslagen?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Standaard verval datum" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "Verlooptijd (in dagen) voor voorraadartikelen van dit deel" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimum voorraad" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Minimaal toegelaten stock niveau" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Eenheden voor dit onderdeel" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Kan dit onderdeel uit andere delen worden gebouwd?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "Kan dit onderdeel gebruikt worden om andere onderdelen te bouwen?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Heeft dit onderdeel een tracking voor unieke items?" -#: part/models.py:1266 +#: part/models.py:1276 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:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "Kan dit onderdeel worden gekocht van externe leveranciers?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Kan dit onderdeel aan klanten worden verkocht?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Is dit onderdeel actief?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Vergrendelde onderdelen kunnen niet worden bewerkt" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "Stuklijst BOM gecontroleerd" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "Is de BOM voor dit deel geldig?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "BOM checksum" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Checksum van BOM opgeslagen" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "BOM gecontroleerd door" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "BOM gecontroleerd datum" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Aanmaken gebruiker" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Eigenaar verantwoordelijk voor dit deel" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Verkopen van meerdere" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Valuta die gebruikt wordt voor de cache berekeningen" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Minimale BOM kosten" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Minimale kosten van onderdelen" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Maximale BOM kosten" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Maximale kosten van onderdelen" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Minimale aankoop kosten" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Minimale historische aankoop kosten" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Maximale aanschaf kosten" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Maximum historische aankoop kosten" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Minimale interne prijs" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Minimale kosten op basis van interne prijsschommelingen" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Maximale interne prijs" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Maximale kosten gebaseerd op interne prijsvoordelen" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Minimale leverancier prijs" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Minimale prijs van onderdeel van externe leveranciers" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Maximale leverancier prijs" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Maximale prijs van onderdeel van externe leveranciers" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Minimale variant kosten" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Berekende minimale kosten van variant onderdelen" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Maximale variant kosten" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Berekende maximale kosten van variant onderdelen" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Minimale kostprijs" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Overschrijf minimale kosten" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Maximale kosten" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Overschrijf maximale kosten" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Berekende minimale kosten" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Berekende totale maximale kosten" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Minimale verkoop prijs" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Minimale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Maximale verkoop prijs" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Maximale verkoopprijs gebaseerd op prijsschommelingen" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Minimale verkoop prijs" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Minimale historische verkoop prijs" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Maximale verkoop prijs" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Maximale historische verkoop prijs" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Onderdeel voor voorraadcontrole" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Getelde items" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Aantal individuele voorraadvermeldingen op het moment van voorraadcontrole" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Totale voorraad op het moment van voorraadcontrole" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Datum" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Datum waarop voorraad werd uitgevoerd" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Minimale voorraadprijs" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Geschatte minimum kosten van de voorraad op de hand" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Maximale voorraadkosten" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Geschatte maximale kosten van de hand van voorraad" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Periodieke verkoopprijs voor onderdelen" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Sjabloon test onderdeel" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Ongeldige sjabloonnaam - moet minstens één alfanumeriek teken bevatten" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "Test sjablonen kunnen alleen worden gemaakt voor testbare onderdelen" -#: part/models.py:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Test naam" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Geef een naam op voor de test" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Test sleutel" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Vereenvoudigde sleutel voor de test" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Test beschrijving" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Voer beschrijving in voor deze test" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Is deze test ingeschakeld?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Vereist" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Is deze test nodig om te doorlopen?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Waarde vereist" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Vereist bijlage" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Geldige keuzes voor deze parameter (komma gescheiden)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld " -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM item kan niet worden gewijzigd - assemblage is vergrendeld" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Selecteer boven liggend onderdeel" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Sub onderdeel" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Selecteer onderdeel dat moet worden gebruikt in BOM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "BOM hoeveelheid voor dit BOM item" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Dit BOM item is optioneel" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "Totale hoeveelheid" -#: part/models.py:4021 +#: part/models.py:4091 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:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "Attriatie" -#: part/models.py:4031 +#: part/models.py:4101 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:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "Afronden meerdere" -#: part/models.py:4044 +#: part/models.py:4114 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:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Artikelregel referentie" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "BOM item notities" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Controle som" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "BOM lijn controle som" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Goedgekeurd" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Dit BOM item is goedgekeurd" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Wordt overgenomen" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "Hoeveelheid moet een geheel getal zijn voor trackable onderdelen" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "BOM Item vervangingen bewerken" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "Vervanging onderdeel kan niet hetzelfde zijn als het hoofddeel" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Bovenliggend BOM item" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Vervanging onderdeel" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Eerste deel" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Tweede deel" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Selecteer gerelateerd onderdeel" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Opmerking voor deze relatie" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Dubbele relatie bestaat al" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Bovenliggende categorie" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Bovenliggende onderdeel categorie" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Subcategorieën" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Resultaten" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Aantal resultaten opgenomen ten opzichte van deze template" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "Bestand is geen afbeelding" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Oorspronkelijk onderdeel" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Selecteer origineel onderdeel om te dupliceren" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Afbeelding kopiëren" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Afbeelding kopiëren van het oorspronkelijke onderdeel" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Copy BOM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Kopieer materiaal van het oorspronkelijke deel" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Parameter data kopiëren van het originele onderdeel" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Notities kopiëren" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Kopieer notities van het originele deel" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Tests kopiëren" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "Test sjablonen kopiëren van het originele deel" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Eerste voorraad hoeveelheid" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Eerste voorraad locatie" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Specificeer locatie van de eerste voorraad voor dit onderdeel" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Selecteer leverancier (of laat leeg om niets in te vullen)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecteer fabrikant (of laat leeg om niets in te vullen)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Fabrikant artikel nummer" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Geselecteerde onderneming is geen geldige leverancier" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Geselecteerde bedrijf is geen geldige fabrikant" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Fabrikant deel dat overeenkomt met deze MPN bestaat al" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Leveranciersdeel dat overeenkomt met deze SKU bestaat al" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Categorie naam" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Bouwen" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "Hoeveelheid van dit deel dat momenteel in productie is" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Er zal een onuitputtelijke hoeveelheid van dit deel worden gebouwd" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Voorraadartikelen" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Revisies" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Totale Voorraad" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Niet toegewezen voorraad" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Variant voorraad" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Dupliceer onderdeel" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Kopieer eerste gegevens uit een ander onderdeel" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Eerste voorraad" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Maak onderdeel met eerste voorraad" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Leveranciersgegevens" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Aanvankelijke leveranciersinformatie voor dit deel toevoegen" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Categorie parameters kopiëren" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Parameter sjablonen kopiëren uit geselecteerde onderdeel categorie" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Bestaande afbeelding" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Bestandsnaam van een bestaande onderdeel afbeelding" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Afbeeldingsbestand bestaat niet" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Valideer de gehele materiaalbon" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Kan bouwen" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "Vereist voor bouworders" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "Toegewezen aan bouwen van orders" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "Vereist voor verkooporders" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "Toegewezen aan verkooporders" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "IPN onderdeel" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "Onderdeel omschrijving" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "Rapport Maken" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Minimale prijs" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Overschrijf berekende waarde voor minimale prijs" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Minimale prijs valuta" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Maximale prijs" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Overschrijf de berekende waarde voor de maximale prijs" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Maximale prijs valuta" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Bijwerken" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Prijzen voor dit onderdeel bijwerken" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "Minimumprijs mag niet hoger zijn dan de maximale prijs" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "Maximale prijs mag niet lager zijn dan de minimale prijs" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Selecteer de bovenliggende assemblage" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Selecteer het onderdeel" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Selecteer onderdeel om BOM van te kopiëren" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Bestaande gegevens verwijderen" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Verwijder bestaande BOM items voor het kopiëren" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Inclusief overgenomen" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "Inclusief stuklijst BOM items die worden overgenomen van getemplated onderdelen" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Ongeldige regels overslaan" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Schakel deze optie in om ongeldige rijen over te slaan" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Verwijder vervangend deel" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopieer vervangende onderdelen bij dubbele stuklijst BOM items" @@ -7100,15 +7205,15 @@ msgstr "Toe te wijzen hoeveelheid" msgid "Label printing failed" msgstr "Label afdrukken mislukt" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Fout bij het renderen label naar PDF" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Fout bij het renderen van label naar HTML" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Geen producten aangeboden om af te drukken" @@ -7169,7 +7274,7 @@ msgstr "Biedt ondersteuning voor barcodes" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7515,20 +7620,20 @@ msgstr "Melding gewijzigd onderdeel" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "Het deel `{part.name}` is geactiveerd met een `{part_action}` event" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF label printer" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Biedt ondersteuning voor het drukken van PDF labels" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Foutopsporing modus" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Schakel debug modus in - retourneert ruwe HTML in plaats van PDF" @@ -7569,7 +7674,7 @@ msgstr "Rand" msgid "Print a border around each label" msgstr "Print een rand rond elk label" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Liggend" @@ -8030,7 +8135,7 @@ msgstr "Plug-in ondersteunt geen label printen" msgid "Invalid label dimensions" msgstr "Ongeldige label afmetingen" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Geen geldige items aan de template verstrekt" @@ -8074,112 +8179,112 @@ msgstr "Bevestig aan het model bij afdrukken" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Sla rapport output op als bijlage ten opzichte van gekoppelde model instantie bij afdrukken" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Bestandsnaam Patroon" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Patroon voor het genereren van bestandsnamen" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Template is ingeschakeld" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "Doel type model voor sjabloon" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filters" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Sjabloon zoekfilters (door komma's gescheiden lijst van sleutel=waarde paren)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Sjabloon bestand" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Standaard paginagrootte voor PDF rapport" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Rapportage weergeven in liggende stand" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "Samenvoegen" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "Geef een enkel rapport tegen geselecteerde items" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Rapport gegenereerd door template {self.name}" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "Sjabloon syntaxis fout" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "Fout bij het renderen rapport" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "Fout bij genereren rapport" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "Fout bij samenvoegen rapport uitvoer" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Breedte [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Label breedte, gespecificeerd in mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Hoogte [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Label hoogte, gespecificeerd in mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "Fout afdrukken van labels" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Tekstfragment" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Rapporteer snippet bestand" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Snippet bestandsbeschrijving" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Asset" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Rapporteer asset bestand" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Beschrijving asset bestand" @@ -8276,7 +8381,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8539,7 +8644,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Voorraadlocatie" @@ -8547,11 +8652,11 @@ msgstr "Voorraadlocatie" msgid "Stock Locations" msgstr "Voorraadlocaties" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Eigenaar" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Selecteer eigenaar" @@ -8559,7 +8664,7 @@ msgstr "Selecteer eigenaar" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Voorraaditems kunnen niet direct worden geplaatst op een structurele voorraadlocatie, maar kunnen zich op onderliggende locaties bevinden." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Extern" @@ -8579,274 +8684,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "{field} bestaat niet" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Onderdeel moet gespecificeerd worden" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "Voorraaditems kunnen niet worden geplaatst in structurele voorraadlocaties!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Voorraadartikel kan niet worden aangemaakt voor virtuele onderdelen" -#: stock/models.py:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "Hoeveelheid moet 1 zijn voor item met een serienummer" -#: stock/models.py:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Item kan niet tot zichzelf behoren" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Bouw referentie verwijst niet naar hetzelfde deel object" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Bovenliggend voorraad item" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Basis onderdeel" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "Selecteer een leveranciersdeel voor dit voorraadartikel" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Waar bevindt zich dit voorraaditem?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Het verpakken van dit voorraaditem is opgeslagen in" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Geïnstalleerd in" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Is dit item geïnstalleerd in een ander item?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Serienummer van dit item" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batch code voor dit voorraaditem" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Voorraad hoeveelheid" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Bron Bouw" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Build voor dit voorraaditem" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Verbruikt door" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Bestelling bouwen welke dit voorraadartikel heeft verbruikt" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Inkooporder Bron" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Inkooporder voor dit voorraadartikel" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Bestemming Verkooporder" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Verwijderen bij leegmaken" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Verwijder dit voorraadproduct wanneer de voorraad is leeg" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Enkele eenheidsprijs van de aankoop op het moment van aankoop" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Omgezet tot onderdeel" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "Hoeveelheid overschrijdt beschikbare voorraad" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Onderdeel is niet ingesteld als traceerbaar" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Hoeveelheid moet heel getal zijn" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Serienummers moeten als lijst worden opgegeven" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Hoeveelheid komt niet overeen met serienummers" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "Kan voorraad niet toewijzen aan structurele locatie" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Testsjabloon bestaat niet" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Voorraadartikel is toegewezen aan een verkooporder" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Voorraad item is geïnstalleerd in een ander item" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Voorraadartikel bevat andere producten" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Voorraadartikel is aan een klant toegewezen" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Voorraad item is momenteel in productie" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Geserialiseerde voorraad kan niet worden samengevoegd" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Dupliceer voorraadartikelen" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Voorraadartikelen moeten hetzelfde onderdeel verwijzen" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "Voorraadartikelen moeten verwijzen naar dezelfde leveranciersdeel" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "De voorraad statuscodes moeten overeenkomen" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "Voorraad item volgen" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Item notities" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "Resultaat voorraad test resultaten" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Waarde moet voor deze test worden opgegeven" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Bijlage moet worden geüpload voor deze test" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "Ongeldige waarde voor deze test" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Test resultaat" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Test uitvoer waarde" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Test resultaat bijlage" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Test notities" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Test station" -#: stock/models.py:3087 +#: stock/models.py:3111 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:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Gestart" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "Het tijdstip van de start test" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Afgerond" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "Het tijdstip van de afgeronde test" @@ -8930,7 +9043,7 @@ msgstr "Voer serienummers voor nieuwe items in" msgid "Supplier Part Number" msgstr "Leverancier artikelnummer" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Verlopen" @@ -9467,131 +9580,131 @@ msgstr "Laatste keer dat het token werd gebruikt" msgid "Revoked" msgstr "Intrekken" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Toestemming set" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Weergeven" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Machtiging om items te bekijken" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Toevoegen" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Machtiging om items toe te voegen" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Wijzigen" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Machtigingen om items te bewerken" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Verwijderen" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Toestemming om items te verwijderen" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "Bot" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Intern" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Gast" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Taal" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Voorkeurstaal voor gebruiker" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Thema" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Instellingen voor webinterface als JSON - niet handmatig bewerken!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Widget" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "Instellingen voor de dashboard widgets als JSON - wijzig niet handmatig!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Naam weergeven" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Gekozen weergavenaam voor de gebruiker" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Functie" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "Titel of positie hoofdtaken" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Gebruiker status bericht" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "Informatie over locatie gebruiker" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "Gebruiker gebruikt actief het systeem" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "Voorkeursinformatie voor de gebruiker" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Gebruikers type" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "Welk type gebruiker is dit?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Organisatie" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "Gebruikers primaire organisatie/affiliatie" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Primaire groep" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "Primaire groep van de gebruiker" diff --git a/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/no/LC_MESSAGES/django.po index 0985597cb6..a522c27bd5 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Norwegian\n" "Language: no_NO\n" @@ -89,6 +89,7 @@ msgstr "Kunne ikke konvertere {original} til {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Ugyldig mengde oppgitt" @@ -104,11 +105,11 @@ msgstr "Oppgi dato" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Tilkoblingsfeil" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Serveren svarte med ugyldig statuskode" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Det har oppstått et unntak" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Serveren svarte med ugyldig \"Content-Length\"-verdi" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Bildestørrelsen er for stor" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Bildenedlasting overskred maksimal størrelse" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Ekstern server returnerte tomt svar" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Angitt URL er ikke en gyldig bildefil" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "E-post" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "Referansen må samsvare påkrevd mønster" msgid "Reference number is too large" msgstr "Referansenummeret er for stort" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Ugyldig valg" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Navn" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Beskrivelse" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Beskrivelse (valgfritt)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Sti" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikatnavn kan ikke eksistere under samme overordnede" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown-notater (valgfritt)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Strekkodedata" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Tredjeparts strekkodedata" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Strekkode-hash" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Unik hash av strekkodedata" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Eksisterende strekkode funnet" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Serverfeil" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "En feil har blitt logget av serveren." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Må være et gyldig tall" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Velg valuta ut fra tilgjengelige alternativer" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Ugyldig verdi" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Eksternt bilde" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URLtil ekstern bildefil" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Nedlasting av bilder fra ekstern URL er ikke aktivert" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "Ugyldig fysisk enhet" msgid "Not a valid currency code" msgstr "Ikke en gyldig valutakode" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Ordrestatus" @@ -561,21 +546,21 @@ msgstr "Ordrestatus" msgid "Parent Build" msgstr "Overordnet produksjon" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -605,7 +590,7 @@ msgstr "Kategori" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produksjonen må avbrytes før den kan slettes" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Forbruksvare" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Valgfritt" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Sammenstilling" @@ -687,32 +672,32 @@ msgstr "Sammenstilling" msgid "Tracked" msgstr "Spores" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Tildelt" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "I bestilling" @@ -720,7 +705,7 @@ msgstr "I bestilling" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Produksjonsordre" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Plassering" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Produksjonsordre-referanse" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Produksjonsstatus" msgid "Build status code" msgstr "Produksjonsstatuskode" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchkode" @@ -870,8 +855,8 @@ msgstr "Batchkode" msgid "Batch code for this build output" msgstr "Batchkode for denne produksjonsartikkelen" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Opprettelsesdato" @@ -891,7 +876,7 @@ msgstr "Forventet sluttdato" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Fullført dato" @@ -907,8 +892,8 @@ msgstr "Utstedt av" msgid "User who issued this build order" msgstr "Brukeren som utstedte denne produksjonsordren" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarlig" @@ -917,12 +902,12 @@ msgstr "Ansvarlig" msgid "User or group responsible for this build order" msgstr "Bruker eller gruppe ansvarlig for produksjonsordren" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Ekstern lenke" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Lenke til ekstern URL" @@ -934,8 +919,8 @@ msgstr "Produksjonsprioritet" msgid "Priority of this build order" msgstr "Produksjonsordrens prioritet" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Prosjektkode" @@ -968,7 +953,7 @@ msgstr "En produksjonsordre er fullført" msgid "Serial numbers must be provided for trackable parts" msgstr "Serienumre må angis for sporbare deler" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Ingen produksjonsartikkel spesifisert" @@ -980,47 +965,47 @@ msgstr "Produksjonsartikkelen er allerede fullført" msgid "Build output does not match Build Order" msgstr "Produksjonsartikkelen samsvarer ikke med produksjonsordren" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Mengden må være større enn null" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Kvantitet kan ikke være større enn utgangsantallet" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Produksjonsartikkel" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Produksjonsobjekt" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Produksjonsobjekt" msgid "Quantity" msgstr "Antall" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Påkrevd antall for produksjonsordre" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Valgt lagervare samsvarer ikke med BOM-linjen" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Mengden må være 1 for serialisert lagervare" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Lagervaren er overtildelt" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Lagervare" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Kildelagervare" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Lagerantall å tildele til produksjonen" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Monteres i" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Lagervare for montering" @@ -1099,7 +1084,7 @@ msgstr "Lagervare for montering" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Delnavn" @@ -1135,7 +1120,7 @@ msgstr "Heltallsverdi kreves for sporbare deler" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Heltallsverdi kreves, da stykklisten inneholder sporbare deler" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" @@ -1156,8 +1141,8 @@ msgstr "Automatisk tildeling av serienummer" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatisk tildeling av nødvendige artikler med tilsvarende serienummer" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Følgende serienummer finnes allerede eller er ugyldige" @@ -1245,7 +1230,7 @@ msgstr "Godta at lagervarer ikke er fullt tildelt til denne produksjonsordren" msgid "Required stock has not been fully allocated" msgstr "Nøvendig lagerbeholdning er ikke fullt tildelt" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Godta uferdig" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part må peke på den samme delen som produksjonsordren" msgid "Item must be in stock" msgstr "Artikkelen må være på lager" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Tilgjengelig antall ({q}) overskredet" @@ -1306,7 +1291,7 @@ msgstr "Produksjonsartikkel må spesifiseres for tildeling av sporede deler" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Produksjonsartikkel kan ikke spesifiseres for tildeling av usporede deler" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Tildelingsartikler må oppgis" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Leverandørdel" @@ -1404,7 +1389,7 @@ msgstr "Produksjonsreferanse" msgid "Part Category Name" msgstr "Delkategorinavn" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Sporbar" @@ -1412,29 +1397,29 @@ msgstr "Sporbar" msgid "Inherited" msgstr "Nedarvet" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Tillat Varianter" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "BOM-artikkel" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "I produksjon" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Ekstern lagerbeholdning" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Tilgjengelig lagerbeholdning" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Brukeren har ikke tillatelse til å slette dette vedlegget" @@ -1554,610 +1543,634 @@ msgstr "Ingen programtillegg" msgid "Project Code Label" msgstr "Etikett for prosjektkode" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Oppdatert" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Tidsstempel for forrige oppdatering" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Unik prosjektkode" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Prosjektbeskrivelse" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Bruker eller gruppe ansvarlig for dette prosjektet" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Innstillings verdi" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Valgt verdi er ikke et gyldig alternativ" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Verdien må være en boolsk verdi" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Verdien må være et heltall" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Nøkkelstreng må være unik" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Bruker" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Antall for prisbrudd" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Pris" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Enhetspris på spesifisert antall" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Endepunkt" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Endepunktet hvor denne webhooken er mottatt" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Navn for webhooken" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Er webhooken aktiv" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Sjetong" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Nøkkel for tilgang" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Hemmelig" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Delt hemmlighet for HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Melding ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Unik Id for denne meldingen" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Vert" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Verten denne meldingen ble mottatt fra" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Tittel" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Overskrift for denne meldingen" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Brødtekst" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Innholdet i meldingen" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Endepunktet meldingen ble mottatt fra" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Arbeidet med" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Var arbeidet med denne meldingen ferdig?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Tittel" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Lenke" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Publisert" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Forfatter" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Sammendrag" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Les" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Er dette nyhetselementet lest?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Bildefil" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Enhetssymbolet må være unikt" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Enhetsnavn må være en gyldig identifikator" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Enhetsnavn" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Valgfritt enhetssymbol" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definisjon" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Enhetsdefinisjon" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Vedlegg" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Fil mangler" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Mangler eksternlenke" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Velg fil å legge ved" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Vedleggskommentar" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Opplastet dato" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Datoen som filen ble lastet opp" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Filstørrelse" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Filstørrelse i byte" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ugyldig modelltype spesifisert for vedlegg" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Verdi" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Opprettet" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Sist oppdatert" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Parametermal" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Sjekkboksparameter kan ikke ha enheter" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Sjekkboksparameter kan ikke ha valg" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Valg må være unike" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Navn på parametermal må være unikt" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Parameternavn" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Enheter" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Fysisk enheter for denne parameteren" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Parameterbeskrivelse" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Sjekkboks" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Er dette parameteret en sjekkboks?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Valg" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Gyldige valg for denne parameteren (kommaseparert)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Aktivert" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Ugyldig valg for parameterverdi" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Mal" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Parameterverdi" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Parameterverdi" msgid "Note" msgstr "Notat" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Valgfritt notatfelt" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Resultat" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 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:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Artikler mottatt" @@ -2457,7 +2470,7 @@ msgstr "Filnavn" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Modelltype" @@ -2601,13 +2614,13 @@ msgstr "Oppdateringsintervall for valuta" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dager" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Valgt valutaoppdaterings-plugin" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Last ned fra URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Nedlastingsgrense" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Maksimal tillatt nedlastingsstørrelse for eksternt bilde" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "User-Agent brukt for å laste ned fra URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Streng URL-validering" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Krev skjemaspesifikasjon ved validering av URLer" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Intervall for oppdateringssjekk" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automatisk sikkerhetskopiering" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Aktiver automatisk sikkerhetskopiering av database og mediafiler" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Automatisk sikkerhetskopieringsintervall" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Angi antall dager mellom automatiske sikkerhetskopieringshendelser" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Slettingsintervall for oppgaver" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Slettingsintervall for feillogg" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Slettingsintervall for varsler" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "Brukervarsler slettes etter angitt antall dager" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Strekkodestøtte" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "Aktiver støtte for strekkodeleser i webgrensesnittet" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Innlesingsforsinkelse for strekkode" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Tidsforsinkelse for behandling av strekkode" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Støtte for strekkodewebkamera" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "Tillat strekkodelesning via webkamera i nettleseren" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Vis Strekkodedata" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Vis strekkodedata som tekst" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Delrevisjoner" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Aktiver revisjonsfeltet for Del" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN regex" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Regulært uttrykksmønster for matching av internt delnummer" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Tilat duplikat av internt delnummer" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Tillat flere deler å dele samme interne delnummer" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Tillat redigering av internt delnummer" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Kopier BOM-data fra del" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Kopier parameterdata fra del" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "Kopier parameterdata som standard ved duplisering av en del" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Kopier testdata fra del" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "Kopier testdata som standard ved duplisering av en del" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Kopier designmaler for kategoriparametere" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "Kopier parametermaler for kategori ved oppretting av en del" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Deler er maler som standard" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "Deler kan settes sammen fra andre komponenter som standard" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "Deler kan bli brukt som underkomponenter som standard" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Kjøpbar" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Deler er kjøpbare som standard" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Salgbar" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Deler er salgbare som standard" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Deler er sporbare som standard" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuelle" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Deler er virtuelle som standard" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Vis relaterte deler" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Vis relaterte deler i en del" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Innledende lagerbeholdningsdata" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Innledende leverandørdata" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Visningsformat for delnavn" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Format for å vise delnavnet" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Standardikon for delkategorier" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "Standardikon for delkategorier (tomt betyr ingen ikon)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Minimum antall desimalplasser for priser" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalt antall desimalplasser for priser" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Bruk leverandørpriser" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Inkluder leverandørprisbrudd i beregninger av totalpriser" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Innkjøpshistorikkoverstyring" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Historiske innkjøpspriser overstyrer leverandørprisnivåer" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Bruk lagervarepriser" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Bruk priser fra manuelt innlagte lagervarer for prisberegninger" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Lagervare prisalder" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Bruk Variantpriser" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Inkluder variantpriser i beregninger av totale priser" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Kun aktive varianter" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "Bruk kun aktive variantdeler til beregning av variantprising" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Intervall for rekalkulering av priser" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "Antall dager før delpriser blir automatisk oppdatert" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Interne Priser" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Aktiver interne priser for deler" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Intern prisoverstyring" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "Hvis tilgjengelig, overstyrer interne priser kalkulering av prisområde" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Aktiver etikettutskrift" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Aktiver utskrift av etiketter fra nettleseren" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Etikettbilde-DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Aktiver Rapporter" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Aktiver generering av rapporter" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Feilsøkingsmodus" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Generer rapporter i feilsøkingsmodus (HTML-output)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Sidestørrelse" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Standard sidestørrelse for PDF-rapporter" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Tving parameterenheter" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Globalt Unike Serienummer" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "Serienummer for lagervarer må være globalt unike" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Slett oppbrukt lagerbeholdning" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Batchkodemal" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "Mal for generering av standard batchkoder for lagervarer" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Lagerbeholdning utløper" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Aktiver funksjonalitet for utløp av lagerbeholdning" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Selg utløpt lagerbeholdning" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Tillat salg av utgått lagerbeholdning" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Foreldet lagerbeholdning tidsintervall" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Produsér Utløpt Lagerbeholdning" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Tillat produksjon med utløpt lagerbeholdning" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Kontroll over eierskap av lagerbeholdning" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Aktiver eierskap over lagerplasseringer og -varer" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Lagerplassering standard ikon" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Lagerplassering standard ikon (tomt betyr ingen ikon)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Vis installerte lagervarer" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Vis installerte lagervarer i lagertabeller" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Produksjonsordre-referansemønster" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "Nødvendig mønster for å generere Produksjonsordre-referansefeltet" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Referansemønster for innkjøpsordre" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "Obligatorisk mønster for generering av referansefelt for innkjøpsordre" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Rediger fullførte innkjøpsordre" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Autofullfør innkjøpsordrer" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Aktiver passord glemt" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Ativer funskjon for glemt passord på innloggingssidene" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Aktiver registrering" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "Aktiver egenregistrerting for brukerer på påloggingssidene" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Aktiver SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Aktiver SSO på innloggingssidene" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Aktiver SSO-registrering" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "E-postadresse kreves" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Krevt at brukere angir e-post ved registrering" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Auto-utfyll SSO-brukere" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "Fyll automatisk ut brukeropplysninger fra SSO-kontodata" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "E-post to ganger" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "Spør brukeren om e-post to ganger ved registrering" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Passord to ganger" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "Spør brukeren om passord to ganger ved registrering" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Tillatte domener" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Begrens registrering til bestemte domener (kommaseparert, begynner med @)" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Gruppe ved registrering" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Krev MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Brukere må bruke flerfaktorsikkerhet." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Sjekk utvidelser ved oppstart" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Aktiver URL-integrasjon" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Tillat utvidelser å legge til URL-ruter" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Aktiver navigasjonsintegrasjon" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Tillat utvidelser å integrere mot navigasjon" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Aktiver app-integrasjon" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Tillat utvidelser å legge til apper" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Aktiver tidsplanintegrasjon" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Tillat utvidelser å kjøre planlagte oppgaver" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Aktiver hendelsesintegrasjon" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Tillat utvidelser å reagere på interne hendelser" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Ekskluder eksterne plasseringer" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Automatisk varetellingsperiode" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Vis brukernes fulle navn" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Vis brukernes fulle navn istedet for brukernavn" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "Intern del er aktiv" msgid "Supplier is Active" msgstr "Leverandør er aktiv" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Produsent" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Kontakt e-post" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontakt" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adresse" @@ -4203,12 +4268,12 @@ msgstr "Fraktnotater for internt bruk" msgid "Link to address information (external)" msgstr "Lenke til adresseinformasjon (ekstern)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Produsentdeler" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Basisdel" @@ -4221,8 +4286,8 @@ msgstr "Velg del" msgid "Select manufacturer" msgstr "Velg produsent" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN" @@ -4250,8 +4315,8 @@ msgstr "Pakkeenhet må være mer enn null" msgid "Linked manufacturer part must reference the same base part" msgstr "Den sammenkoblede produsentdelen må referere til samme basisdel" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Leverandør" msgid "Select supplier" msgstr "Velg leverandør" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Leverandørens lagerbeholdningsenhet" @@ -4290,15 +4355,15 @@ msgstr "URL for ekstern leverandørdel-lenke" msgid "Supplier part description" msgstr "Leverandørens delbeskrivelse" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "grunnkostnad" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum betaling (f.eks. lageravgift)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Emballasje" @@ -4315,7 +4380,7 @@ msgstr "Pakkeantall" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "flere" @@ -4339,23 +4404,23 @@ msgstr "Dato for siste oppdatering av tilgjengelighetsdata" msgid "Supplier Price Break" msgstr "Leverandørens prisbrudd" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Standardvaluta brukt for denne leverandøren" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Bedriftsnavn" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "På lager" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Gyldig" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Ukjent" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Gruppe" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Ordrereferanse" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Opprettet av" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Ordre" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Intern del" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Fullført" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Innkjøpsordre" msgid "Sales Order" msgstr "Salgsordre" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Total pris" msgid "Total price for this order" msgstr "Total pris for denne ordren" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Ordrevaluta" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta for denne ordren (la stå tom for å bruke firmastandard)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Ordrebeskrivelse (valgfritt)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Velg prosjektkode for denne ordren" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Lenke til ekstern side" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldato" @@ -4963,12 +5028,12 @@ msgstr "Kontaktpunkt for denne ordren" msgid "Company address for this order" msgstr "Selskapsadresse for denne ordren" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Ordrereferanse" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Status" @@ -4992,15 +5057,15 @@ msgstr "Leverandørens ordrereferanse" msgid "received by" msgstr "mottatt av" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Dato ordre ble fullført" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Destinasjon" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "Mengde må være positiv" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kunde" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Firma som varene selges til" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Kundereferanse " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Kundens ordrereferanse" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Forsendelsesdato" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "sendt av" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Kun en åpen ordre kan merkes som fullført" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Bestillingen kan ikke fullføres da det finnes ufullstendige forsendelser" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Antall" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Linjereferanse" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Linjenotater" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Linjeelementbeskrivelse (valgfritt)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Ytterligere kontekst for denne linjen" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Enhetspris" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Delens leverandør må samsvare med leverandør" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Leverandørdel" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Mottatt" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Antall enheter mottatt" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Innkjøpspris" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Enhet-innkjøpspris" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "Kun salgbare deler kan tildeles en salgsordre" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Salgspris" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Enhets-salgspris" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Sendt" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Sendt antall" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Dato for forsendelse" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Leveringsdato" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Dato for levering av forsendelse" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Sjekket Av" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Brukeren som sjekket forsendelsen" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Forsendelse" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Forsendelsesnummer" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Sporingsnummer" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Sporingsinformasjon for forsendelse" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Referansenummer for tilknyttet faktura" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Forsendelsen er allerede sendt" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Forsendelsen har ingen tildelte lagervarer" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Lagervarer er ikke blitt tildelt" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Kan ikke tildele lagerbeholdning til en linje uten en del" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tildelingsantall kan ikke overstige tilgjengelig lagerbeholdning" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Tildelingsantall må være større enn null" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Antall må være 1 for serialisert lagervare" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Salgsordre samsvarer ikke med forsendelse" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Forsendelsen samsvarer ikke med salgsordre" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Linje" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Forsendelsesreferanse for salgsordre" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Artikkel" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Velg lagervare å tildele" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Angi lagertildelingsmengde" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Returordre-referanse" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Firmaet delen skal returneres fra" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Returordrestatus" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Velg artikkel som skal returneres fra kunde" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Mottatt Dato" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Utfall" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Utfall for dette linjeelementet" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "Kostnad forbundet med retur eller reparasjon for dette linjeelementet" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Kopier parametere" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Leverandørnavn" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Ordren kan ikke kanselleres" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Tillat ordre å lukkes med ufullstendige linjeelementer" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "Ordren har ufullstendige linjeelementer" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Ordren er ikke åpen" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Innkjøpsvaluta" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU-kode" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Internt delnummer" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Leverandørdel må angis" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Innkjøpsordre må angis" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Leverandør må samsvare med innkjøpsordre" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Innkjøpsordre må samsvare med leverandør" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Ordrelinje" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Velg lagerplassering for mottatte enheter" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Angi batchkode for innkommende lagervarer" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Utløpsdato" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Angi serienummer for innkommende lagervarer" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Strekkode" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Skannet strekkode" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Strekkode allerede i bruk" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Linjeelementer må være oppgitt" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Målplassering må angis" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Angitte strekkodeverdier må være unike" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Fullførte forsendelser" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Valuta for salgspris" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Ingen forsendelsesopplysninger oppgitt" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Linjeelement er ikke knyttet til denne ordren" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Mengden må være positiv" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Skriv inn serienummer for å tildele" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Forsendelsen er allerede sendt" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Forsendelsen er ikke knyttet til denne ordren" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Ingen treff funnet for følgende serienummer" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Returordrelinje" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Linjeelementet samsvarer ikke med returordre" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Linjeelementet er allerede mottatt" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Valuta for linje" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "Delkategori" msgid "Part Categories" msgstr "Delkategorier" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Standard plassering" @@ -5849,7 +5926,7 @@ msgstr "Standard nøkkelord for deler i denne kategorien" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valgfritt)" @@ -5870,984 +5947,1012 @@ msgstr "Standardverdi" msgid "Default Parameter Value" msgstr "Standard Parameterverdi" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Deler" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Delen '{self}' kan ikke brukes i BOM for '{parent}' (rekursiv)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Delen '{parent}' er brukt i BOM for '{self}' (rekursiv)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN må samsvare med regex-mønsteret {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Lagervare med dette serienummeret eksisterer allerede" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplikat av internt delnummer er ikke tillatt i delinnstillinger" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Del med dette Navnet, internt delnummer og Revisjon eksisterer allerede." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Deler kan ikke tilordnes strukturelle delkategorier!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Delnavn" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Er Mal" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Er delen en maldel?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Er delen en variant av en annen del?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variant av" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Delbeskrivelse (valgfritt)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Nøkkelord" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Del-nøkkelord for å øke synligheten i søkeresultater" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Delrevisjon eller versjonsnummer" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revisjon" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Hvor er denne artikkelen vanligvis lagret?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Standard utløp" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "Utløpstid (i dager) for lagervarer av denne delen" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimal lagerbeholdning" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Minimum tillatt lagernivå" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Måleenheter for denne delen" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Kan denne delen bygges fra andre deler?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "Kan denne delen brukes til å bygge andre deler?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Har denne delen sporing av unike artikler?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "Kan denne delen kjøpes inn fra eksterne leverandører?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Kan denne delen selges til kunder?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Er denne delen aktiv?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Kontrollsum for BOM" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Lagret BOM-kontrollsum" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Stykkliste sjekket av" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Stykkliste sjekket dato" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Opprettingsbruker" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Eier ansvarlig for denne delen" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Selg flere" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Valuta som brukes til å bufre prisberegninger" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Minimal BOM-kostnad" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Minste kostnad for komponentdeler" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Maksimal BOM-kostnad" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Maksimal kostnad for komponentdeler" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Minimal innkjøpskostnad" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Minimal historisk innkjøpskostnad" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Maksimal innkjøpskostnad" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Maksimal historisk innkjøpskostnad" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Minimal intern pris" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Minimal kostnad basert på interne prisbrudd" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Maksimal intern pris" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Maksimal kostnad basert på interne prisbrudd" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Minimal leverandørpris" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Minimumspris for del fra eksterne leverandører" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Maksimal leverandørpris" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Maksimalpris for del fra eksterne leverandører" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Minimal Variantkostnad" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Beregnet minimal kostnad for variantdeler" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Maksimal Variantkostnad" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Beregnet maksimal kostnad for variantdeler" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Minimal kostnad" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Overstyr minstekostnad" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Maksimal kostnad" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Overstyr maksimal kostnad" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Beregnet samlet minimal kostnad" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Beregnet samlet maksimal kostnad" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Minimal salgspris" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Minimal salgspris basert på prisbrudd" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Maksimal Salgspris" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Maksimal salgspris basert på prisbrudd" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Minimal Salgskostnad" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Minimal historisk salgspris" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Maksimal Salgskostnad" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Maksimal historisk salgspris" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Del for varetelling" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Antall" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Antall individuelle lagerenheter på tidspunkt for varetelling" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Total tilgjengelig lagerbeholdning på tidspunkt for varetelling" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Dato" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Dato for utført lagertelling" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Minimal lagerkostnad" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Estimert minimal kostnad for lagerbeholdning" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Maksimal lagerkostnad" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Estimert maksimal kostnad for lagerbeholdning" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Testnavn" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Angi et navn for testen" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Testbeskrivelse" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Legg inn beskrivelse for denne testen" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Påkrevd" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Er det påkrevd at denne testen bestås?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Krever verdi" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Krever vedlegg" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Velg overordnet del" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Underordnet del" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Velg del som skal brukes i BOM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "BOM-antall for denne BOM-artikkelen" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Denne BOM-artikkelen er valgfri" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "BOM-artikkelreferanse" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "BOM-artikkelnotater" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Kontrollsum" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "BOM-linje kontrollsum" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Godkjent" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Denne BOM-artikkelen er godkjent" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Arves" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Denne BOM-artikkelen er arvet fra stykkliste for variantdeler" -#: part/models.py:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "Antall må være heltallsverdi for sporbare deler" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Underordnet del må angis" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "BOM-artikkel erstatning" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "Erstatningsdel kan ikke være samme som hoveddelen" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Overordnet BOM-artikkel" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Erstatningsdel" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Velg relatert del" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Duplikatforhold eksisterer allerede" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Innkjøpsvaluta for lagervaren" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Original Del" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Velg original del å duplisere" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Kopier Bilde" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Kopier bilde fra originaldel" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Kopier Stykkliste" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Kopier stykkliste fra original del" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Kopier parameterdata fra originaldel" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Kopier notater" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Kopier notater fra originaldel" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Innledende lagerplassering" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Angi initiell lagerplasering for denne delen" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Velg leverandør (eller la stå tom for å hoppe over)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Velg produsent (eller la stå tom for å hoppe over)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Produsentens delenummer" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Valgt firma er ikke en gyldig leverandør" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Valgt firma er ikke en gyldig produsent" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Produsentdel som matcher dette MPN-et, finnes allerede" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Leverandørdel som matcher denne SKU-en, finnes allerede" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Kategorinavn" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Produseres" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Lagervarer" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Total lagerbeholdning" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Dupliser del" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Kopier innledende data fra en annen del" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Innledende lagerbeholdning" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Lag en del med innledende lagermengde" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Leverandøropplysninger" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Legg til innledende leverandørinformasjon for denne delen" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Kopier kategoriparametre" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Kopier parametermaler fra valgt delkategori" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Eksisterende bilde" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Filnavn for et eksisterende del-bilde" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Bildefilen finnes ikke" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Godkjenn hele Stykklisten" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Kan Produsere" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Minstepris" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Overstyr beregnet verdi for minimumspris" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Valuta for minstepris" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Makspris" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Overstyr beregnet verdi for maksimal pris" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Valuta for maksimal pris" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Oppdater" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Oppdater priser for denne delen" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "Minsteprisen kan ikke være større enn maksimal pris" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "Maksimal pris kan ikke være mindre enn minstepris" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Velg del å kopiere BOM fra" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Fjern eksisterende data" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Fjern eksisterende BOM-artikler før kopiering" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Inkluder arvede" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "Inkluder BOM-artikler som er arvet fra maldeler" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Hopp over ugyldige rader" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Aktiver dette alternativet for å hoppe over ugyldige rader" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Kopier erstatningsdeler" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopier erstatningsdeler når BOM-elementer dupliseres" @@ -7099,15 +7204,15 @@ msgstr "Antall å tildele" msgid "Label printing failed" msgstr "Utskrift av etikett mislyktes" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "Gir innebygd støtte for strekkoder" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF etikettskriver" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Gir innebygd støtte for å skrive ut PDF-etiketter" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Feilsøkingsmodus" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Aktiver feilsøkingsmodus - returnerer rå HTML i stedet for PDF" @@ -7568,7 +7673,7 @@ msgstr "Kantlinjer" msgid "Print a border around each label" msgstr "Skriv ut en kant rundt hver etikett" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Liggende" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Filnavnmønster" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtre" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Sidestørrelse for PDF-rapporter" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Generer rapport i landskapsorientering" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Bredde [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Etikettbredde, spesifisert i mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Høyde [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Etiketthøyde, spesifisert i mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Snutt" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Rapportsnuttfil" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Filbeskrivelse for snutt" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Ressurs" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Rapportressursfil" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Ressursfilbeskrivelse" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8538,7 +8643,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Lagerplassering" @@ -8546,11 +8651,11 @@ msgstr "Lagerplassering" msgid "Stock Locations" msgstr "Lagerplasseringer" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Eier" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Velg eier" @@ -8558,7 +8663,7 @@ msgstr "Velg eier" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Lagervarer kan ikke knyttes direkte mot en strukturell lagerplassering, men kan knyttes mot underplasseringer." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Ekstern" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "Lagervarer kan ikke plasseres i strukturelle plasseringer!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Lagervare kan ikke opprettes for virtuelle deler" -#: stock/models.py:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Elementet kan ikke tilhøre seg selv" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "Elementet må ha en produksjonsrefereanse om is_building=True" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Produksjonsreferanse peker ikke til samme del-objekt" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Overordnet lagervare" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Basisdel" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "Velg en tilsvarende leverandørdel for denne lagervaren" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Hvor er denne lagervaren plassert?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Inpakningen denne lagervaren er lagret i" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Installert i" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Er denne artikkelen montert i en annen artikkel?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Serienummer for denne artikkelen" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Batchkode for denne lagervaren" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Lagerantall" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Kildeproduksjon" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Produksjon for denne lagervaren" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Brukt av" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Produksjonsordren som brukte denne lagervaren" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Kildeinnkjøpsordre" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Innkjøpsordre for denne lagervaren" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Tildelt Salgsordre" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Slett når oppbrukt" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Slett lagervaren når beholdningen er oppbrukt" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Innkjøpspris per enhet på kjøpstidspunktet" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Konvertert til del" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Delen er ikke angitt som sporbar" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Antall må være heltall" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Antallet stemmer ikke overens med serienumrene" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Lagervare har blitt tildelt en salgsordre" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Lagervare er montert i en annen artikkel" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Lagervare inneholder andre artikler" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Lagervare har blitt tildelt til en kunde" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Lagervare er for tiden i produksjon" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Serialisert lagerbeholdning kan ikke slås sammen" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Duplisert lagervare" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Lagervarer må referere til samme del" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "Lagervarer må referere til samme leverandørdel" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Lagerstatuskoder må være like" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Oppføringsnotater" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Verdi må angis for denne testen" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Vedlegg må lastes opp for denne testen" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Testens verdi" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Vedlegg til testresultat" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Testnotater" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "Angi serienummer for nye artikler" msgid "Supplier Part Number" msgstr "Leverandørens delnummer" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Utløpt" @@ -9466,131 +9579,131 @@ msgstr "Sist gang tokenet ble brukt" msgid "Revoked" msgstr "Tilbakekalt" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Tillatelse satt" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Visning" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Tillatelse til å se elementer" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Legg til" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Tillatelse til å legge til elementer" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Endre" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Tillatelse til å endre elementer" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Slett" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Tillatelse til å slette elementer" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pl/LC_MESSAGES/django.po index e582fe8544..502ba10bcd 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Polish\n" "Language: pl_PL\n" @@ -89,6 +89,7 @@ msgstr "Nie udało się przeliczyć {original} na {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Podano nieprawidłową ilość" @@ -104,11 +105,11 @@ msgstr "Wprowadź dane" msgid "Invalid decimal value" msgstr "Niepoprawna wartość dziesiętna" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Błąd połączenia" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Serwer odpowiedział z nieprawidłowym kodem statusu" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Wystąpił wyjątek" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Serwer odpowiedział z nieprawidłową wartością Content-Length" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Rozmiar obrazu jest zbyt duży" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Przekroczono maksymalny rozmiar pobieranego obrazu" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Zdalny serwer zwrócił pustą odpowiedź" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Podany adres URL nie jest poprawnym plikiem obrazu" @@ -219,7 +220,7 @@ msgstr "Logowanie do aplikacji" msgid "Email" msgstr "Adres E-Mail" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Musisz włączyć uwierzytelnianie dwuskładnikowe przed wykonaniem czegokolwiek innego." @@ -263,124 +264,108 @@ msgstr "Odniesienie musi być zgodne z wymaganym wzorem" msgid "Reference number is too large" msgstr "Numer odniesienia jest zbyt duży" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Błędny wybór" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nazwa" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Opis (opcjonalny)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Ścieżka" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplikaty nazw nie mogą istnieć pod tym samym rodzicem" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Notatki Markdown (opcjonalne)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Dane kodu kreskowego" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Dane kodu kreskowego stron trzecich" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hasz kodu kreskowego" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Unikalny hasz danych kodu kreskowego" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Znaleziono istniejący kod kreskowy" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Błąd serwera" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Błąd został zapisany w logach serwera." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Numer musi być prawidłowy" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Waluta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Wybierz walutę z dostępnych opcji" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Nieprawidłowa wartość" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Obrazek zewnętrzny" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "Adres URL zdalnego pliku obrazu" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Pobieranie obrazów ze zdalnego URL nie jest włączone" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Nie udało się pobrać obrazu ze zdalnego adresu URL" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "Niewłaściwa jednostka fizyczna" msgid "Not a valid currency code" msgstr "Nieprawidłowy kod waluty" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Status zamówienia" @@ -561,21 +546,21 @@ msgstr "Status zamówienia" msgid "Parent Build" msgstr "Budowa nadrzędna" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Obejmuje warianty" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Obejmuje warianty" msgid "Part" msgstr "Komponent" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategoria" @@ -605,7 +590,7 @@ msgstr "Kategoria" msgid "Ancestor Build" msgstr "Budowa poprzednika" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Przypisane do mnie" @@ -653,11 +638,11 @@ msgstr "Zakończone przed" msgid "Completed after" msgstr "Zakończone po" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Minimalna data" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Maksymalna data" @@ -669,16 +654,16 @@ msgstr "Wyklucz drzewo" 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:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Materiał eksploatacyjny" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opcjonalne" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Złożenie" @@ -687,32 +672,32 @@ msgstr "Złożenie" msgid "Tracked" msgstr "Śledzony" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testowalne" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Zaległe zamówienie" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Przydzielono" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "W Zamówieniu" @@ -720,7 +705,7 @@ msgstr "W Zamówieniu" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Zlecenie Budowy" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Lokalizacja" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Wyjście" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Odwołanie do zamówienia wykonania" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Status budowania" msgid "Build status code" msgstr "Kod statusu budowania" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kod partii" @@ -870,8 +855,8 @@ msgstr "Kod partii" msgid "Batch code for this build output" msgstr "Kod partii dla wyjścia budowy" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Data utworzenia" @@ -891,7 +876,7 @@ msgstr "Docelowy termin zakończenia" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Data zakończenia" @@ -907,8 +892,8 @@ msgstr "Wydany przez" msgid "User who issued this build order" msgstr "Użytkownik, który wydał to zamówienie" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odpowiedzialny" @@ -917,12 +902,12 @@ msgstr "Odpowiedzialny" msgid "User or group responsible for this build order" msgstr "Użytkownik lub grupa odpowiedzialna za te zlecenie produkcji" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Link Zewnętrzny" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link do zewnętrznego adresu URL" @@ -934,8 +919,8 @@ msgstr "Priorytet budowy" msgid "Priority of this build order" msgstr "Priorytet tego zamówienia produkcji" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Kod projektu" @@ -968,7 +953,7 @@ msgstr "Kolejność kompilacji została zakończona" msgid "Serial numbers must be provided for trackable parts" msgstr "Należy podać numery seryjne dla lokalizowania części" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nie określono danych wyjściowych budowy" @@ -980,47 +965,47 @@ msgstr "Budowanie wyjścia jest już ukończone" msgid "Build output does not match Build Order" msgstr "Skompilowane dane wyjściowe nie pasują do kolejności kompilacji" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Ilość musi być większa niż zero" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Ilość nie może być większa niż ilość wyjściowa" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Zbuduj obiekt" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Zbuduj obiekt" msgid "Quantity" msgstr "Ilość" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Wymagana ilość dla zlecenia produkcji" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Wybrana pozycja magazynowa nie pasuje do pozycji w zestawieniu BOM" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Ilość musi wynosić 1 dla serializowanych zasobów" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Pozycja magazynowa jest nadmiernie przydzielona" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Element magazynowy" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Lokalizacja magazynowania przedmiotu" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Ilość zapasów do przydzielenia do produkcji" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Zainstaluj do" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Docelowa lokalizacja magazynowa przedmiotu" @@ -1099,7 +1084,7 @@ msgstr "Docelowa lokalizacja magazynowa przedmiotu" msgid "Build Level" msgstr "Poziom budowania" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Nazwa komponentu" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Numer seryjny" @@ -1156,8 +1141,8 @@ msgstr "Automatycznie przydzielaj numery seryjne" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatycznie przydzielaj wymagane elementy z pasującymi numerami seryjnymi" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Poniższe numery seryjne już istnieją lub są nieprawidłowe" @@ -1245,7 +1230,7 @@ msgstr "Zaakceptuj, że przedmioty magazynowe nie zostały w pełni przypisane d msgid "Required stock has not been fully allocated" msgstr "Wymagany stan nie został w pełni przypisany" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Akceptuj niekompletne" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "Towar musi znajdować się w magazynie" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostępna ilość ({q}) przekroczona" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Wersja" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Część dostawcy" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Możliwość śledzenia" @@ -1412,29 +1397,29 @@ msgstr "Możliwość śledzenia" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Zezwalaj na warianty" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Element BOM" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "W produkcji" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Zew. zasoby magazynowe" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Dostępna ilość" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "Brak wtyczki" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Zaktualizowany" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Data ostatniej aktualizacji" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Zaktualizowano przez" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Użytkownik, który ostatnio zaktualizował ten obiekt" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Unikalny kod projektu" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Opis projektu" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Użytkownik lub grupa odpowiedzialna za to zamówienie" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Klucz ustawień" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Ustawienia wartości" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Wybrana wartość nie jest poprawną opcją" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Wartość musi być wartością binarną" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Wartość musi być liczbą całkowitą" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Wartość musi być poprawną liczbą" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Wartość nie zgadza się z kontrolą poprawności" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Ciąg musi być unikatowy" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Użytkownik" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Cena" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Cena jednostkowa po określonej ilości" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Punkt końcowy" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktywny" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token dostępu" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Sekret" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Współdzielony sekret dla HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Id wiadomości" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Unikalny identyfikator dla tej wiadomości" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Host" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Host, od którego otrzymano tę wiadomość" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Nagłówek" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Nagłówek tej wiadomości" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Zawartość" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Treść tej wiadomości" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Opracowany na" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Czy prace nad tą wiadomością zostały zakończone?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Tytuł" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Łącze" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Opublikowano" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Podsumowanie" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Czytaj" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Czy ta wiadomość była przeczytana?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Plik obrazu" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Jednostka Niestandardowa" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Symbol jednostki musi być unikalny" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Nazwa jednostki musi być prawidłowym identyfikatorem" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Nazwa jednostki" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Opcjonalny symbol jednostki" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definicja" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definicja jednostki" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Załącznik" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Brak pliku" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Brak zewnętrznego odnośnika" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Typ modelu" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Docelowy typ modelu dla obrazu" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Wybierz plik do załączenia" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Komentarz" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Komentarz do załącznika" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Data dodania" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Data przesłania pliku" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Rozmiar pliku" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Rozmiar pliku w bajtach" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Wartość" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etykieta" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Kolor" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Model" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Model musi być wybrany" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Klucz musi być wybrany" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Zablokowany" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Utworzony" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Ostatnia aktualizacja" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Jednostki" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Aktywne" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Szablon" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Dane" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Wartość parametru" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Wartość parametru" msgid "Note" msgstr "Uwaga" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Wynik" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Doręczono" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Klucz" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "Nazwa pliku" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Typ modelu" @@ -2601,13 +2614,13 @@ msgstr "Interwał aktualizacji waluty" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dni" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Pobierz z adresu URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Limit rozmiaru pobierania" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Ścisła weryfikacja adresu URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Wymagaj specyfikacji schematu podczas sprawdzania poprawności adresów URL" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Częstotliwość sprawdzania aktualizacji" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automatyczna kopia zapasowa" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Interwał automatycznego tworzenia kopii zapasowych" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Określ liczbę dni między zdarzeniami automatycznej kopii zapasowej" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Interwał usuwania zadań" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Obsługa kodu kreskowego" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Wyrażenie regularne IPN" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Zezwól na powtarzający się IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Zezwól na edycję IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Skopiuj BOM komponentu" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Możliwość zakupu" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Części są domyślnie z możliwością zakupu" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Możliwość sprzedaży" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Części są domyślnie z możliwością sprzedaży" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Części są domyślnie z możliwością śledzenia" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Wirtualny" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Części są domyślnie wirtualne" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Pokaż powiązane części" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Użyj cennika dostawcy" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Nadpisanie historii zakupów" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Ceny wewnętrzne" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Włącz drukowanie etykiet" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Włącz drukowanie etykiet z interfejsu WWW" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "DPI etykiety" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Włącz raporty" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Tryb Debugowania" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Rozmiar strony" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Przekonwertuj walutę" -#: common/setting/system.py:931 +#: common/setting/system.py:939 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:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Automatycznie wypełniaj zlecenia zakupu" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Włącz opcję zapomnianego hasła" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Włącz funkcję zapomnianego hasła na stronach logowania" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Włącz rejestrację" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Włącz SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Włącz SSO na stronach logowania" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Włącz rejestrację SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Włącz synchronizację grupy SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Adres e-mail jest wymagany" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Autouzupełnianie użytkowników SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "E-mail dwa razy" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Hasło dwukrotnie" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Grupuj przy rejestracji" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Wymuś MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Użytkownicy muszą używać zabezpieczeń wieloskładnikowych." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Sprawdź wtyczki przy starcie" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Sprawdź dostępność aktualizacji wtyczek" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Włącz okresowe sprawdzanie aktualizacji zainstalowanych wtyczek" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Włącz integrację URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Włącz wtyczki, aby dodać ścieżki URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Włącz integrację z aplikacją" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Włącz wtyczki, aby dodać aplikacje" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Włącz wtyczki, aby uruchamiać zaplanowane zadania" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Włącz kody projektów" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Włącz kody projektów do śledzenia projektów" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 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:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Producent" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Kontaktowy adres e-mail" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontakt" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adres" @@ -4203,12 +4268,12 @@ msgstr "Notatki wysyłkowe do użytku wewnętrznego" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Komponent producenta" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Część bazowa" @@ -4221,8 +4286,8 @@ msgstr "Wybierz część" msgid "Select manufacturer" msgstr "Wybierz producenta" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Dostawca" msgid "Select supplier" msgstr "Wybierz dostawcę" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "koszt podstawowy" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Opakowanie" @@ -4315,7 +4380,7 @@ msgstr "Ilość w opakowaniu" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "wielokrotność" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Domyślna waluta używana dla tego dostawcy" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Na stanie" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Ważny" @@ -4623,7 +4688,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:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Nieznany" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupa" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Numer zamówienia" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Utworzony przez" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Posiada ceny" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Zamówienie" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Komponent wewnętrzny" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Zamówienie oczekujące" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Zakończone" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Zlecenie zakupu" msgid "Sales Order" msgstr "Zamówienie zakupu" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Cena całkowita" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Link do zewnętrznej witryny" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data docelowa" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Odniesienie zamówienia" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Status" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "odebrane przez" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Przeznaczenie" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "Wartość musi być liczbą dodatnią" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Klient" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Data wysyłki" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "wysłane przez" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Ilość elementów" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Odebrane" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Cena zakupu" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Cena zakupu jednostkowego" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Cena sprzedaży" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Jednostkowa cena sprzedaży" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Wysłane" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Wysłana ilość" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Data wysyłki" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Sprawdzone przez" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Użytkownik, który sprawdził tę wysyłkę" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Przesyłka" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Numer przesyłki" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Numer śledzenia" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Informacje o śledzeniu przesyłki" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Przesyłka została już wysłana" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Zarezerwowana ilość nie może przekraczać ilości na stanie" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Alokowana ilość musi być większa niż zero" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Linia" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Komponent" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Kopiuj parametry" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Zamówienie nie może zostać anulowane" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Zlecenie zakupu musi być określone" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Dostawca musi być zgodny ze zleceniem zakupu" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Zlecenie zakupu musi być zgodne z dostawcą" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data ważności" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Kod kreskowy" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "Kategoria komponentu" msgid "Part Categories" msgstr "Kategorie części" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Domyślna lokalizacja" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "Wartość domyślna" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Części" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Nazwa komponentu" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Czy szablon" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Czy ta część stanowi szablon części?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Czy ta część jest wariantem innej części?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Wariant" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Słowa kluczowe" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Wersja" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Domyślne wygasanie" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimalny stan magazynowy" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Czy ten komponent może być zbudowany z innych komponentów?" -#: part/models.py:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Czy ta część wymaga śledzenia każdego towaru z osobna?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Czy ta część jest aktywna?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Tworzenie użytkownika" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Sprzedaj wiele" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Data" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Nazwa testu" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Testowy opis" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Wprowadź opis do tego testu" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Wymagane" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Wymaga wartości" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Wymaga załącznika" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Wybierz część nadrzędną" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Podczęść" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Ten element BOM jest opcjonalny" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Notatki pozycji BOM" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Suma kontrolna" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Zatwierdzone" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Część zastępcza" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Część 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Część 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Wybierz powiązaną część" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Podkategorie" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Waluta zakupu tego towaru" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Kopiuj obraz" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Kopiuj BOM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Towary" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Duplikuj część" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Usuń istniejące dane" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Pomiń nieprawidłowe wiersze" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Włącz tę opcję, aby pominąć nieprawidłowe wiersze" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Tryb Debugowania" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Wzór nazwy pliku" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtry" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Domyślna wielkość strony dla raportów PDF" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Renderuj raport w orientacji poziomej" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Szerokość [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Wysokość [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Wycinek" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Numer Seryjny" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "Lokacje stanu magazynowego" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Właściciel" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Wybierz właściciela" @@ -8558,7 +8663,7 @@ msgstr "Wybierz właściciela" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Nadrzędny towar" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Część podstawowa" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "Wybierz pasującą część dostawcy dla tego towaru" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Zainstalowane w" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Ilość w magazynie" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Wyszukaj zlecenie zakupu" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Zlecenie zakupu dla tego towaru" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Usuń po wyczerpaniu" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Ilość musi być liczbą całkowitą" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Notatki do wpisu" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Należy podać wartość dla tego testu" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Wynik testu" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Termin minął" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Uprawnienia nadane" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Widok" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Uprawnienie do wyświetlania przedmiotów" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Dodaj" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Uprawnienie do dodawania przedmiotów" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Zmień" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Uprawnienie do edycji przedmiotów" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Usuń" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Uprawnienie do usuwania przedmiotów" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/pt/LC_MESSAGES/django.po index 4cd778ed0e..34935b3cd2 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Portuguese\n" "Language: pt_PT\n" @@ -89,6 +89,7 @@ msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Quantidade fornecida inválida" @@ -104,11 +105,11 @@ msgstr "Insira uma Data" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "O servidor respondeu com código estado inválido" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 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:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Tamanho da imagem muito grande" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu o tamanho máximo" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou resposta vazia" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "A referência deve corresponder ao padrão exigido" msgid "Reference number is too large" msgstr "O número de referência é muito grande" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Escolha inválida" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Descrição" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Caminho" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomes duplicados não podem existir sob o mesmo parental" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Notas Markdown (opcional)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Dados de código de barras" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Dados de código de barras de terceiros" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hash de código de barras" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Hash exclusivo de dados de código de barras" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Erro de servidor" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Log de erro salvo pelo servidor." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Preicsa ser um numero valido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Selecione a Moeda nas opções disponíveis" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Imagens Remota" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL do arquivo de imagem remoto" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Baixar imagens de URL remota não está habilitado" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ 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:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Situação do pedido" @@ -561,21 +546,21 @@ msgstr "Situação do pedido" msgid "Parent Build" msgstr "Produção Progenitor" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Peça" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -605,7 +590,7 @@ msgstr "Categoria" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Produção deve ser cancelada antes de ser deletada" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Consumível" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opcional" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Montagem" @@ -687,32 +672,32 @@ msgstr "Montagem" msgid "Tracked" msgstr "Monitorado" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Alocado" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "No pedido" @@ -720,7 +705,7 @@ msgstr "No pedido" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Ordem de Produção" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Local" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Referência do pedido de produção" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Progresso da produção" msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Código de Lote" @@ -870,8 +855,8 @@ msgstr "Código de Lote" msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Criado em" @@ -891,7 +876,7 @@ msgstr "Data alvo final" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Data de conclusão" @@ -907,8 +892,8 @@ msgstr "Emitido por" msgid "User who issued this build order" msgstr "Usuário que emitiu este pedido de produção" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsável" @@ -917,12 +902,12 @@ msgstr "Responsável" 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:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Link Externo" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link para URL externa" @@ -934,8 +919,8 @@ msgstr "Prioridade de Produção" msgid "Priority of this build order" msgstr "Prioridade deste pedido de produção" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Código do projeto" @@ -968,7 +953,7 @@ msgstr "Um pedido de produção foi concluído" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" @@ -980,47 +965,47 @@ msgstr "Saída de produção já completada" 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 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:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Item da linha de Produção" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Objeto de produção" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Objeto de produção" msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Item estoque selecionado não coincide com linha da LDM" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Item de estoque" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Instalar em" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Destino do Item do Estoque" @@ -1099,7 +1084,7 @@ msgstr "Destino do Item do Estoque" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Nome da Peça" @@ -1135,7 +1120,7 @@ msgstr "Quantidade inteira necessária para peças rastreáveis" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de Série" @@ -1156,8 +1141,8 @@ msgstr "Alocar Números de Série Automaticamente" 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:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 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" @@ -1245,7 +1230,7 @@ msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" @@ -1293,7 +1278,7 @@ msgstr "bin_item.part deve indicar a mesma peça do pedido de produção" msgid "Item must be in stock" msgstr "Item deve estar em estoque" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" @@ -1306,7 +1291,7 @@ msgstr "Saída de produção deve ser definida para alocação de peças rastrea 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Alocação do Item precisa ser fornecida" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Fornecedor da Peça" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Rastreável" @@ -1412,29 +1397,29 @@ msgstr "Rastreável" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Permitir variações" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Item LDM" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Estoque Disponível" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "O Utilizador não tem permissão para remover este anexo" @@ -1554,610 +1543,634 @@ msgstr "Sem extensão" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Atualizado" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Tempo da última atualização" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Código único do projeto" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Descrição do projeto" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Usuário ou grupo responsável por este projeto" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Valor da Configuração" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Valor escolhido não é uma opção válida" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Valor deve ser um valor booleano" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Valor deve ser um número inteiro" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "A frase senha deve ser diferenciada" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Usuario" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Preço" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Preço unitário na quantidade especificada" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Ponto final" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Ponto final em qual o gancho web foi recebido" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ativo" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Este gancho web está ativo" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token de acesso" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Segredo" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Servidor" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Servidor do qual esta mensagem foi recebida" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Cabeçalho" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Cabeçalho da mensagem" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Corpo" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Corpo da mensagem" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Trabalhado em" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Título" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Ligação" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Publicado" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Resumo" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Lida" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Esta notícia do item foi lida?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Arquivo de imagem" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Nome da unidade deve ser um identificador válido" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Nome da unidade" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Símbolo de unidade opcional" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definição" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definição de unidade" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Anexo" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Arquivo ausente" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Comentario" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Valor" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Criado" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Última atualização" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Modelo de parâmetro" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Parâmetros da caixa de seleção não podem ter unidades" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Os parâmetros da caixa de seleção não podem ter escolhas" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Escolhas devem ser únicas" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Nome do modelo de parâmetro deve ser único" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Unidades" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Unidades físicas para este parâmetro" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Descrição do Parâmetro" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Este parâmetro é uma caixa de seleção?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Escolhas" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Opções válidas para este parâmetro (separadas por vírgulas)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Escolha inválida para valor do parâmetro" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Modelo" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Dados" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Valor do Parâmetro" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Valor do Parâmetro" msgid "Note" msgstr "Anotação" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Resultado" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chave" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Itens Recebidos" @@ -2457,7 +2470,7 @@ msgstr "Nome do arquivo" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "Intervalo de Atualização da Moeda" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dias" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Extensão de Atualização de Moeda a utilizar" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Baixar do URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Limite de tamanho para baixar" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Maior tamanho de imagem remota baixada permitida" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "Usuário-agente utilizado para baixar da URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Validação rigorosa de URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Exigir especificação de esquema ao validar URLs" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Atualizar Intervalo de Verificação" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Cópia de Segurança Automática" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Intervalo de Backup Automático" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Intervalo para Excluir da Tarefa" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Intervalo para Excluir do Registro de Erro" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Intervalo para Excluir de Notificação" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Suporte aos códigos de barras" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Atraso na entrada de código de barras" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Tempo de atraso de processamento de entrada de barras" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Suporte a código de barras via Câmera" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "Permitir escanear código de barras por câmera pelo navegador" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Revisões de peças" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Habilitar campo de revisão para a Peça" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Permitir a exclusão da Montagem" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Padrão de expressão regular adequado para Peça IPN" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Permitir Duplicação IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que várias peças compartilhem o mesmo IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Permitir Edição IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Copiar dados da LDM da Peça" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Copiar Dados de Parâmetro da Peça" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Copiar Dados Teste da Peça" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Copiar Parâmetros dos Modelos de Categoria" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Componente" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Comprável" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Vendível" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Peças vão vendíveis por padrão" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Peças são virtuais por padrão" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Mostra peças relacionadas" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Mostrar peças relacionadas para uma peça" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Dados Iniciais de Estoque" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Dados Iniciais de Fornecedor" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Formato de Exibição do Nome da Peça" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Formato para exibir o nome da peça" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Ícone de Categoria de Peça Padrão" -#: common/setting/system.py:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de Casas Decimais do Preço" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Máximo Casas Decimais de Preço" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Usar Preços do Fornecedor" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Sobrescrever histórico de compra" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Usar Preços do Item em Estoque" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Idade do preço do Item em Estoque" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Usar Preço Variável" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Apenas Ativar Variáveis" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Intervalo de Reconstrução de Preços" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Preços Internos" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Habilitar preços internos para peças" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Sobrepor Valor Interno" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Ativar impressão de etiquetas" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "DPI da Imagem na Etiqueta" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Habilitar Relatórios" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Ativar geração de relatórios" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Modo de depuração" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Gerar relatórios em modo de depuração (saída HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Relatório de erros" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Registro de erros que ocorrem ao gerar relatórios" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Tamanho da página" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Tamanho padrão da página PDF para relatórios" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Forçar Unidades de Parâmetro" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Seriais Únicos Globais" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Excluir Estoque Esgotado" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Modelo de Código de Lote" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Validade do Estoque" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Ativar função de validade de estoque" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Vender estoque expirado" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Permitir venda de estoque expirado" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Tempo de Estoque Inativo" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Produzir Estoque Vencido" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Permitir produção com estoque vencido" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Controle de propriedade do estoque" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Ícone padrão do local de estoque" -#: common/setting/system.py:759 +#: common/setting/system.py:751 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:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Mostrar Itens de Estoque Instalados" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Exibir itens de estoque instalados nas tabelas de estoque" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Verificar BOM ao instalar itens" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Permitir Transferência Fora do Estoque" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Produção" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Requer Proprietário Responsável" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 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:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Bloquear até os Testes serem Aprovados" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Compras" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Editar Pedidos de Compra Concluídos" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Autocompletar Pedidos de Compra" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Habitar esquecer senha" -#: common/setting/system.py:946 +#: common/setting/system.py:954 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:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Habilitar cadastro" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Ativar SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Ativar SSO na página de acesso" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Ativar registro SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email obrigatório" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Exigir do usuário o e-mail no cadastro" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Auto-preencher usuários SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Enviar email duplo" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "No registro pedir aos usuários duas vezes pelo email" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Senha duas vezes" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Domínios permitidos" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Grupo no cadastro" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Forçar AMF" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Os usuários devem usar uma segurança multifator." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Checar extensões no início" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Verificar por atualizações de plugin" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 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:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Ativar integração URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Ativar extensão para adicionar rotas URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Ativar integração de navegação" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Ativar extensões para integrar à navegação" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Ativa integração com aplicativo" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Ativar extensões para adicionar aplicativos" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Ativar integração do calendário" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Ativar extensões para executar tarefas agendadas" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Ativar integração de eventos" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Ativar extensões para responder a eventos internos" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Excluir Locais Externos" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Período de Balanço Automático" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Mostrar nomes completos dos usuários" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Mostrar Nomes Completos em vez de Nomes de Usuário" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "Últimas máquinas de impressão utilizadas" msgid "Save the last used printing machines for a user" msgstr "Salvar as últimas máquinas de impressão usadas para um usuário" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Fabricante" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Endereço de e-mail do contato" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Contato" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Endereço" @@ -4203,12 +4268,12 @@ msgstr "Notas de envio para uso interno" msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Peça do Fabricante" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Peça base" @@ -4221,8 +4286,8 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "NPF" @@ -4250,8 +4315,8 @@ msgstr "Unidades de pacote deve ser maior do que zero" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4290,15 +4355,15 @@ msgstr "URL do link externo da peça do fabricante" msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "preço base" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Embalagem" @@ -4315,7 +4380,7 @@ msgstr "Quantidade de embalagens" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "múltiplo" @@ -4339,23 +4404,23 @@ msgstr "Data da última atualização da disponibilidade dos dados" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Moeda padrão utilizada para este fornecedor" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Válido" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Desconhecido" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupo" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Referência do Pedido" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Criado por" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Pedido" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Peça Interna" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Concluído" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Pedido de Compra" msgid "Sales Order" msgstr "Pedido de Venda" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Preço Total" msgid "Total price for this order" msgstr "Preço total deste pedido" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Moeda do pedido" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descrição do pedido (opcional)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Selecione o código do projeto para este pedido" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Link para página externa" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data alvo" @@ -4963,12 +5028,12 @@ msgstr "Ponto de contato para este pedido" msgid "Company address for this order" msgstr "Endereço da empresa para este pedido" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Referência do pedido" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Situação" @@ -4992,15 +5057,15 @@ msgstr "Código de referência do pedido fornecedor" msgid "received by" msgstr "recebido por" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Dia que o pedido foi concluído" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Destino" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "Quantidade deve ser um número positivo" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Referência do Cliente " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Código de Referência do pedido do cliente" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Data de Envio" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Quantidade do item" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Referência do Item em Linha" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Observações do Item de Linha" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Descrição item de linha (opcional)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Contexto adicional para esta linha" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Preço Unitário" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "A peça do fornecedor deve corresponder ao fornecedor" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Fornecedor da Peça" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Recebido" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preço de Compra" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Preço unitário de compra" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Preço de Venda" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Preço de venda unitário" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Quantidade enviada" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Data do envio" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Data de Entrega" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Data da entrega do envio" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Verificado por" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Usuário que verificou esta remessa" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Remessa" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Número do Envio" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Número de Rastreamento" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Informação de rastreamento da remessa" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Número da Fatura" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Número de referência para fatura associada" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "O pedido já foi enviado" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Remessa não foi alocada nos itens de estoque" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "O item do estoque não foi atribuído" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 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:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "A quantidade de alocação não pode exceder a quantidade em estoque" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Quantidade deve ser 1 para item de estoque serializado" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Pedidos de venda não coincidem com a remessa" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 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:2614 +#: order/models.py:2645 msgid "Line" msgstr "Linha" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Referência de remessa do pedido de venda" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Selecione o item de estoque para alocar" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Insira a quantidade de atribuição de estoque" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Referência de Pedidos de Devolução" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Empresa da qual os itens estão sendo retornados" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Estado do pedido de retorno" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Selecione o item a ser devolvido pelo cliente" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Data de Recebimento" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Despesa/gastos" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Gastos com esta linha de itens" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Copiar Parâmetros" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Nome do Fornecedor" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Pedido não pode ser cancelado" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 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:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "O pedido tem itens da linha incompletos" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "O pedido não está aberto" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Moeda de preço de compra" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Numero interno do produto" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "A peça do fornecedor deve ser especificada" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "O pedido de compra deve ser especificado" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "O fornecedor deve corresponder o pedido de compra" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Pedido de compra deve corresponder ao fornecedor" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Itens de linha" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Selecione o local de destino para os itens recebidos" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Digite o código do lote para itens de estoque recebidos" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Data de validade" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Digite o número de série para itens de estoque recebidos" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Código de barras já em uso" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Itens de linha deve ser providenciados" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Loca de destino deve ser especificado" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Código de barras fornecido deve ser único" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Envios concluídos" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Moeda de preço de venda" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Nenhum detalhe da remessa fornecido" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Item de linha não está associado a este pedido" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Quantidade deve ser positiva" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Digite números de série para alocar" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "O pedido já foi enviado" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "O envio não está associado a este pedido" -#: order/serializers.py:1868 +#: order/serializers.py:1886 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:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Devolver item do pedido" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Item do pedido não bate com o pedido de devolução" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Item do pedido já foi recebido" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Tipo de moeda para o item do pedido" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "Categoria da Peça" msgid "Part Categories" msgstr "Categorias de Peça" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Local Padrão" @@ -5849,7 +5926,7 @@ msgstr "Palavras-chave padrão para peças nesta categoria" msgid "Icon" msgstr "Ícone" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" @@ -5870,984 +5947,1012 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Peças" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Peça '{self}' não pode ser utilizada na BOM para '{parent}' (recursiva)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Peça '{parent}' é usada na BOM para '{self}' (recursiva)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN deve corresponder ao padrão regex {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 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:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Não é permitido duplicar IPN em configurações de partes" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 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:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Peças não podem ser atribuídas a categorias estruturais!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Nome da peça" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "É um modelo" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Esta peça é uma peça modelo?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Esta peça é variante de outra peça?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variante de" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Descrição da peça (opcional)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Palavras chave" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Palavras-chave para melhorar a visibilidade nos resultados da pesquisa" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Revisão de peça ou número de versão" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revisão" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Onde este item é armazenado normalmente?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Validade Padrão" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Estoque Mínimo" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Nível mínimo de estoque permitido" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Unidade de medida para esta peça" -#: part/models.py:1248 +#: part/models.py:1258 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:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Esta parte tem rastreamento para itens únicos?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "Esta peça pode ser comprada de fornecedores externos?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Esta peça pode ser vendida a clientes?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Esta parte está ativa?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Soma de Verificação da LDM" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Soma de verificação da LDM armazenada" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "LDM conferida por" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "LDM verificada no dia" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Criação de Usuário" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Proprietário responsável por esta peça" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Venda múltipla" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Moeda usada para armazenar os cálculos de preços" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Custo Mínimo da LDM" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Custo mínimo das peças componentes" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Custo Máximo da LDM" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Custo máximo das peças componentes" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Custo Mínimo de Compra" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Custo mínimo histórico de compra" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Custo Máximo de Compra" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Custo máximo histórico de compra" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Preço Interno Mínimo" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Custo mínimo baseado nos intervalos de preço internos" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Preço Interno Máximo" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Custo máximo baseado nos intervalos de preço internos" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Preço Mínimo do Fornecedor" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Preço mínimo da peça de fornecedores externos" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Preço Máximo do Fornecedor" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Preço máximo da peça de fornecedores externos" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Custo Mínimo variável" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Custo mínimo calculado das peças variáveis" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Custo Máximo Variável" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Custo máximo calculado das peças variáveis" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Custo Mínimo" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Sobrepor o custo mínimo" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Custo Máximo" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Sobrepor o custo máximo" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Custo total mínimo calculado" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Custo total máximo calculado" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Preço Mínimo de Venda" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Preço mínimo de venda baseado nos intervalos de preço" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Preço Máximo de Venda" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Preço máximo de venda baseado nos intervalos de preço" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Custo Mínimo de Venda" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Preço histórico mínimo de venda" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Custo Máximo de Venda" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Preço histórico máximo de venda" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Peça para Balanço" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Total de Itens" -#: part/models.py:3477 +#: part/models.py:3487 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:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Estoque total disponível no momento do balanço" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Data" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Data de realização do balanço" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Custo Mínimo de Estoque" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Custo mínimo estimado de estoque disponível" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Custo Máximo de Estoque" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Custo máximo estimado de estoque disponível" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Nome de Teste" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Insira um nome para o teste" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Descrição do Teste" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Digite a descrição para este teste" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Requerido" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Este teste é obrigatório passar?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Requer Valor" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Anexo obrigatório" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Selecione a Peça Parental" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Selecionar peça a ser usada na LDM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Quantidade de LDM para este item LDM" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Este item LDM é opcional" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Referência do Item LDM" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Notas do Item LDM" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Soma de verificação" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Soma de Verificação da LDM da linha" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Validado" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "O item da LDM foi validado" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Obtém herdados" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "Quantidade deve ser valor inteiro para peças rastreáveis" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Sub peça deve ser especificada" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Substituir Item da LDM" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Item LDM Parental" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Substituir peça" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Parte 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Parte 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Selecionar Peça Relacionada" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Relação duplicada já existe" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Categoria de peça pai" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Sub-categorias" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Moeda de compra deste item de estoque" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Peça Original" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Selecione a peça original para duplicar" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Copiar imagem" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Copiar LDM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Copiar lista de materiais da peça original" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Copiar dados do parâmetro da peça original" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Copiar Notas" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Copiar imagem da peça original" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Quantidade Inicial de Estoque" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Local Inicial do Estoque" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Especifique o local do estoque inicial para esta Peça" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Selecione o fornecedor (ou deixe em branco para pular)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Selecione fabricante (ou deixe em branco para pular)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Número de Peça do Fabricante" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "A empresa selecionada não é um fornecedor válido" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "A empresa selecionada não é um fabricante válido" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "A peça do fabricante que corresponde a essa MPN já existe" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "A peça do fornecedor que corresponde a essa SKU já existe" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Nome da Categoria" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Produzindo" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Peça duplicada" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Copiar dados iniciais de outra peça" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Estoque inicial" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Criar peça com a quantidade inicial de estoque" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Informações do Fornecedor" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Adicionar informação inicial de fornecedor para esta peça" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Copiar Parâmetros da Categoria" -#: part/serializers.py:993 +#: part/serializers.py:994 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:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Imagem Existente" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Nome de arquivo de uma imagem de peça existente" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "A imagem não existe" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Validar a Lista de Materiais completa" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Pode Produzir" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Preço Mínimo" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Sobrepor valor calculado para preço mínimo" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Moeda do preço mínimo" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Preço Máximo" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Sobrepor valor calculado para preço máximo" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Moeda do preço máximo" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Atualizar preços desta peça" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 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:1563 +#: part/serializers.py:1552 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:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Selecionar peça para copiar a LDM" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Remover Dado Existente" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Remova itens LDM existentes antes de copiar" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Incluir Herdados" -#: part/serializers.py:2006 +#: part/serializers.py:2004 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:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Pular Linhas inválidas" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Habilitar esta opção para pular linhas inválidas" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Copiar Peças Substitutas" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Copiar peças de substitutas quando duplicar itens de LDM" @@ -7099,15 +7204,15 @@ msgstr "Quantidade a alocar" msgid "Label printing failed" msgstr "Impressão de etiqueta falhou" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "Fornece suporte nativo para códigos de barras" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "Impressora de etiquetas PDF do InvenTree" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Providenciar suporte nativo para impressão de etiquetas em PDF" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Modo de depuração" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Ativar o modo de depuração - retorna HTML bruto em vez de PDF" @@ -7568,7 +7673,7 @@ msgstr "Borda" msgid "Print a border around each label" msgstr "Imprima uma borda em torno de cada etiqueta" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Paisagem" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Padrão de Nome de Arquivo" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtros" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Tamanho da página para relatórios PDF" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Renderizar relatório em orientação paisagem" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Largura [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Largura da etiqueta, em mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Altura [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Altura da Etiqueta, em mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Recorte" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Relatar arquivo de recorte" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Descrição do arquivo de recorte" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Patrimônio" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Reportar arquivo de ativos" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Descrição do arquivo de ativos" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Número de Sério" @@ -8538,7 +8643,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Localização do estoque" @@ -8546,11 +8651,11 @@ msgstr "Localização do estoque" msgid "Stock Locations" msgstr "Locais de estoque" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Responsavel" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Selecionar Responsável" @@ -8558,7 +8663,7 @@ msgstr "Selecionar Responsável" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Os itens de estoque podem não estar diretamente localizados em um local de estoque estrutural, mas podem ser localizados em locais filhos." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Externo" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 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:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 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:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "O item não pode pertencer a si mesmo" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 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:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Item de Estoque Parental" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Peça base" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Onde está localizado este item de estoque?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Embalagem deste item de estoque está armazenado em" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Instalado em" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Este item está instalado em outro item?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Número de série para este item" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Código do lote para este item de estoque" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Quantidade de Estoque" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Produção de Origem" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Produção para este item de estoque" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Consumido por" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Pedido de produção que consumiu este item de estoque" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Pedido de compra Fonte" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Pedido de Compra para este item de estoque" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Destino do Pedido de Venda" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Excluir quando esgotado" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Excluir este item de estoque quando o estoque for esgotado" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Preço de compra unitário único no momento da compra" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Convertido para peça" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Peça não está definida como rastreável" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Quantidade deve ser inteira" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "A quantidade não corresponde aos números de série" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Item em estoque foi reservado para um pedido" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Item em estoque está instalado em outro item" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "item em estoque contem outro(s) items" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Item em estoque foi reservado para outro cliente" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Item no estoque está em produção no momento" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Itens de série não podem ser mesclados" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Item de estoque duplicado" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Itens de estoque devem se referir à mesma peça" -#: stock/models.py:2106 +#: stock/models.py:2130 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:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Códigos de estado do estoque devem corresponder" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Observações de entrada" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Deve-se fornecer o valor desse teste" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "O anexo deve ser enviado para este teste" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Resultado do teste" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Valor da saída do teste" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Anexo do resultado do teste" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Notas do teste" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "Inserir número de série para novos itens" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Expirado" @@ -9466,131 +9579,131 @@ msgstr "Última vez que o token foi usado" msgid "Revoked" msgstr "Revogado" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Permissão definida" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Visualizar" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Permissão para ver itens" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Adicionar" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Permissão para adicionar itens" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Alterar" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Permissões para editar itens" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Excluir" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Permissão para excluir itens" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" 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 5b474c1454..96f9ded308 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Portuguese, Brazilian\n" "Language: pt_BR\n" @@ -89,6 +89,7 @@ msgstr "Não foi possível converter {original} para {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Quantidade inválida" @@ -104,11 +105,11 @@ msgstr "Informe a data" msgid "Invalid decimal value" msgstr "Valor decimal inválido" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Erro de conexão" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "O servidor respondeu com código de estado inválido" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Ocorreu uma exceção" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 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:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "O download da imagem excedeu seu tamanho máximo" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "O servidor remoto retornou uma resposta vazia" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "A URL fornecida não é um arquivo de imagem válido" @@ -219,7 +220,7 @@ msgstr "Entrar no aplicativo" msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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." @@ -263,124 +264,108 @@ msgstr "A referência deve corresponder ao padrão exigido" msgid "Reference number is too large" msgstr "O número de referência é muito longo" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Escolha inválida" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nome" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Descrição" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Descrição (opcional)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Caminho" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Nomes duplicados não podem existir sob o mesmo parental" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Notas Markdown (opcional)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Dados de código de barras" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Dados de código de barras de terceiros" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Hash de código de barras" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Hash exclusivo de dados de código de barras" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Código de barras existente encontrado" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Erro de servidor" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Um erro foi registrado pelo servidor." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Deve ser um número válido" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Moeda" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Selecione a moeda entre as opções disponíveis" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Este campo não pode ser nulo." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Valor inválido" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Imagem remota" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL do arquivo da imagem remota" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Baixar imagens de URL remota não está habilitado" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Falha ao baixar a imagem da URL remota" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Formato de conteúdo inválido" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "Tipo de conteúdo não encontrado" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ 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:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Situação de pedido" @@ -561,21 +546,21 @@ msgstr "Situação de pedido" msgid "Parent Build" msgstr "Produção Progenitora" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Incluir Variáveis" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Incluir Variáveis" msgid "Part" msgstr "Parte" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Categoria" @@ -605,7 +590,7 @@ msgstr "Categoria" msgid "Ancestor Build" msgstr "Construção de Ancestrais" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Atribuído a mim" @@ -653,11 +638,11 @@ msgstr "Concluído antes" msgid "Completed after" msgstr "Concluído após" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Data Mínima" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Data máxima" @@ -669,16 +654,16 @@ msgstr "Excluir árvore" 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:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Consumível" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opcional" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Montagem" @@ -687,32 +672,32 @@ msgstr "Montagem" msgid "Tracked" msgstr "Rastreado" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testável" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Pedido pendente" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Alocado" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Em pedido" @@ -720,7 +705,7 @@ msgstr "Em pedido" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Ordem da compilação" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Local" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Saída" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Referência do pedido de produção" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Progresso da produção" msgid "Build status code" msgstr "Código de situação da produção" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Código do lote" @@ -870,8 +855,8 @@ msgstr "Código do lote" msgid "Batch code for this build output" msgstr "Código do lote para esta saída de produção" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Criado em" @@ -891,7 +876,7 @@ msgstr "Data alvo final" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Data de conclusão" @@ -907,8 +892,8 @@ msgstr "Emitido por" msgid "User who issued this build order" msgstr "Usuário que emitiu esta ordem de produção" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsável" @@ -917,12 +902,12 @@ msgstr "Responsável" 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:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Link Externo" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link para URL externa" @@ -934,8 +919,8 @@ msgstr "Prioridade de Produção" msgid "Priority of this build order" msgstr "Prioridade desta ordem de compilação" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Código do Projeto" @@ -968,7 +953,7 @@ msgstr "Um pedido de produção foi concluído" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nenhuma saída de produção especificada" @@ -980,47 +965,47 @@ msgstr "Saída da produção já está concluída" msgid "Build output does not match Build Order" msgstr "Saída da produção não corresponde à Ordem de Produção" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Quantidade deve ser maior que zero" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 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:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 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:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Item da ordem de produção" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Compilar objeto" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Compilar objeto" msgid "Quantity" msgstr "Quantidade" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Quantidade necessária para o pedido de produção" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 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:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Quantidade deve ser 1 para estoque serializado" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "O item do estoque está sobre-alocado" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Item de Estoque" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Origem do item em estoque" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Quantidade do estoque para alocar à produção" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Instalar em" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Destino do Item do Estoque" @@ -1099,7 +1084,7 @@ msgstr "Destino do Item do Estoque" msgid "Build Level" msgstr "Nível de produção" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Nome da Peça" @@ -1135,7 +1120,7 @@ msgstr "Quantidade inteira necessária para peças rastreáveis" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Números de Série" @@ -1156,8 +1141,8 @@ msgstr "Alocar Números de Série Automaticamente" 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:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 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" @@ -1245,7 +1230,7 @@ msgstr "Aceitar que os itens de estoque não foram totalmente alocados para esta msgid "Required stock has not been fully allocated" msgstr "Estoque obrigatório não foi totalmente alocado" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Aceitar Incompleto" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part deve apontar para a mesma parte que a ordem de produção" msgid "Item must be in stock" msgstr "O item deve estar em estoque" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Quantidade disponível ({q}) excedida" @@ -1306,7 +1291,7 @@ msgstr "Saída de produção deve ser definida para alocação de peças rastrea 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Alocação de itens precisam ser fornecidos" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Produção" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Fornecedor da Peça" @@ -1404,7 +1389,7 @@ msgstr "Referência da produção" msgid "Part Category Name" msgstr "Nome da Categoria" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Rastreável" @@ -1412,29 +1397,29 @@ msgstr "Rastreável" msgid "Inherited" msgstr "Herdado" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Permitir variantes" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Item BOM" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "Em Produção" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Agendado para produção" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Estoque Externo" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Estoque Disponível" @@ -1531,6 +1516,10 @@ 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:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "O usuário não tem permissão para deletar esse anexo" @@ -1554,610 +1543,634 @@ msgstr "Sem extensão" msgid "Project Code Label" msgstr "Rótulo de código do projeto" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Atualizado" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Tempo da última atualização" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Atualizado Por" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Usuário que atualizou este objeto pela última vez" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Código único do projeto" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Descrição do projeto" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Usuário ou grupo responsável por este projeto" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Chave de configurações" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Valor da Configuração" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Valor escolhido não é uma opção válida" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Valor deve ser um valor booleano" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Valor deve ser um número inteiro" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "O valor deve ser um número válido" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "O valor não passa em verificações de validação" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "A frase senha deve ser diferenciada" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Usuário" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Quantidade de Parcelamentos" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Preço" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Preço unitário na quantidade especificada" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Ponto final" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Ponto final em qual o webhook foi recebido" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Nome para este webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Ativo" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Este webhook está ativo" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Ficha" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Ficha para acesso" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Secreto" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Segredo compartilhado para HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID da Mensagem" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Identificador exclusivo desta mensagem" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Servidor" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Servidor do qual esta mensagem foi recebida" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Cabeçalho" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Cabeçalho da mensagem" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Corpo" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Corpo da mensagem" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Ponto do qual esta mensagem foi recebida" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Trabalhado em" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "O trabalho desta mensagem foi concluído?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Título" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Publicado" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Resumo" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Lida" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Esta notícia do item foi lida?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Arquivo de imagem" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Tipo modelo de destino para esta imagem" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "ID do modelo de destino para esta imagem" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Unidade Personalizada" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "O símbolo da unidade deve ser único" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Nome da unidade deve ser um identificador válido" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Nome da unidade" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Símbolo" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Símbolo de unidade opcional" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definição" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definição de unidade" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Anexo" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Arquivo ausente" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Link externo não encontrado" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Categoria de Modelo" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Tipo modelo de destino para esta imagem" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Selecione arquivo para anexar" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Comentário" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Comentário de anexo" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Data de envio" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Data em que o arquivo foi enviado" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Tamanho do arquivo" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Tamanho do arquivo em bytes" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Categoria de modelo especificado inválido para anexo" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Estado personalizado" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Estados personalizados" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Status Referência Definido" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Conjunto de status estendido com este estado personalizado" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Chave lógica" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Valor" -#: common/models.py:2121 +#: common/models.py:2196 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:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Nome do estado" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etiqueta" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Etiqueta que será exibida no frontend" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Cor" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Cor que será exibida no frontend" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Modelo" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Modelo que este estado está associado a" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Modelo deve ser selecionado" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "A chave deve ser selecionada" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Chave lógica deve ser selecionada" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "A chave deve diferir da chave lógica" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Uma classe de estado de referência válida deve ser fornecida" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 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:2206 +#: common/models.py:2281 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:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Lista de Seleção" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Listas de Seleção" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Nome da lista de seleção" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Descrição da lista de seleção" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Bloqueado" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Esta lista de seleção está bloqueada?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Esta lista de seleção pode ser usada?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Extensão de origem" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Extensão que fornece a lista de seleção" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Série de Origem" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "Série opcional identificando a fonte usada para esta lista" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Entrada Padrão" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Entrada padrão para esta lista de seleção" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Criado em" -#: common/models.py:2303 +#: common/models.py:2378 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:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Última Atualização" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Entrada na lista de seleção" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Entradas na Lista de Seleção" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Lista de seleção à qual esta entrada pertence" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Valor da entrada da lista de seleção" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Rótulo para a entrada da lista de seleção" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Descrição da entrada da lista de seleção" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Esta entrada da lista de seleção está ativa?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Nome do Parâmetro" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Unidades" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Caixa de seleção" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Habilitado" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Modelo" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Dados" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "Anotação" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Campo opcional de notas" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Escaneamento de Código de Barras" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Dados de código de barras" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Usuário que escaneou o código de barras" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Marcador de hora" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Data e hora da verificação do código de barras" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "O endpoint da URL que processou o código de barras" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Contexto" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Dados de contexto para escanear código de barras" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Resposta" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Dados de resposta da verificação de código de barras" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Resultado" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "O código de barras foi digitalizado com sucesso?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Ocorreu um erro" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "Mensagem de e-mail" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "Mensagens de Email" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Anunciado" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Enviado" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Falhou" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Entregue" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Confirmado" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Entrada" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Saída" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Não responder" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Rastrear Entrega" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Monitorado" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Clique no caminho" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "ID Global" -#: common/models.py:3096 +#: common/models.py:3171 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:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "ID do Tópico" -#: common/models.py:3105 +#: common/models.py:3180 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:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Tópico" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Tópico vinculado para esta mensagem" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "Tópico do e-mail" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "Tópicos de e-mail" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Chave" -#: common/models.py:3183 +#: common/models.py:3258 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:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Identificador exclusivo deste tópico" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Iniciado interno" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Este tópico foi iniciado internamente?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Data e hora em que o tópico foi criado" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Data e hora da última atualização do tópico" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Itens Recebidos" @@ -2457,7 +2470,7 @@ msgstr "Nome do arquivo" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Categoria de Modelo" @@ -2601,13 +2614,13 @@ msgstr "Intervalo de Atualização da Moeda" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dias" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Extensão de Atualização de Moeda a utilizar" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Baixar do URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Limite de tamanho para baixar" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Tamanho máximo permitido para download da imagem remota" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "Usuário-agente utilizado para baixar da URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Validação rigorosa de URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Exigir especificação de esquema ao validar URLs" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Atualizar Intervalo de Verificação" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Backup Automático" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Intervalo de Backup Automático" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Intervalo para Excluir da Tarefa" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Intervalo para Excluir do Registro de Erro" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Intervalo para Excluir de Notificação" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "Intervalo de Exclusão de e-mail" -#: common/setting/system.py:363 +#: common/setting/system.py:343 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:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "Proteger o Log de E-mail" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "Evitar exclusão de entradas de registros de e-mail" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Suporte aos códigos de barras" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Armazenar Resultados do Código de Barras" -#: common/setting/system.py:383 +#: common/setting/system.py:363 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:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Contagem máxima de códigos de barras" -#: common/setting/system.py:389 +#: common/setting/system.py:369 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:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Atraso na entrada de código de barras" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Tempo de atraso de processamento de entrada de barras" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Suporte a webcam com código de barras" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Código de barras Exibir Dados" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Exibir dados do código de barras no navegador como texto" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Extensão de geração de códio de barras" -#: common/setting/system.py:414 +#: common/setting/system.py:394 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:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Revisões de peças" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Ativar campo de revisão para a Peça" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Somente Revisão da Assembleia" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Permitir revisões apenas para peças de montagem" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Permitir a exclusão da Assembleia" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Regex IPN" -#: common/setting/system.py:438 +#: common/setting/system.py:418 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:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Permitir Duplicação IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Permitir que várias peças compartilhem o mesmo IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Permitir Edição IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Copiar dados da LDM da Peça" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Copiar Dados de Parâmetro da Peça" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Copiar Dados Teste da Peça" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Copiar Parâmetros dos Modelos de Categoria" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Peças são modelos por padrão" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Componente" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Comprável" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Peças são compráveis por padrão" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Comercializável" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Peças vão vendíveis por padrão" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Peças vão rastreáveis por padrão" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtual" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Peças são virtuais por padrão" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Mostrar peças relacionadas" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Exibir peças relacionadas com uma peça" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Dados Iniciais de Estoque" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Dados Iniciais de Fornecedor" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Formato de Exibição do Nome da Peça" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Formato para exibir o nome da peça" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Ícone de Categoria de Peça Padrão" -#: common/setting/system.py:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Mínimo de Casas Decimais do Preço" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Máximo Casas Decimais de Preço" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Usar Preços do Fornecedor" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Substituir Histórico de Compras" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Usar Preços do Item em Estoque" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Idade do preço do Item em Estoque" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Usar Preço Variável" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Incluir preços variáveis nos cálculos de valores gerais" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Apenas Ativar Variáveis" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Atualização automática dos preços" -#: common/setting/system.py:627 +#: common/setting/system.py:607 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:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Intervalo de Reconstrução de Preços" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Preços Internos" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Habilitar preços internos para peças" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Substituição de preço interno" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Habilitar Impressão de Etiqueta" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Ativar impressão de etiqueta pela interface da internet" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "DPI da Imagem na Etiqueta" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Ativar Relatórios" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Ativar geração de relatórios" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Modo de depuração" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Gerar relatórios em modo de depuração (saída HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Registro de erros" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Registrar erros que ocorrem ao gerar relatórios" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Tamanho da página" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Tamanho padrão da página PDF para relatórios" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Forçar Unidades de Parâmetro" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Seriais Únicos Globais" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Excluir Estoque Esgotado" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Modelo de Código de Lote" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Validade do Estoque" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Ativar função de validade de estoque" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Vender estoque expirado" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Permitir venda de estoque expirado" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Tempo de Estoque Inativo" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Produzir Estoque Vencido" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Permitir produção com estoque vencido" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Controle de propriedade do estoque" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Ativar controle de propriedade sobre locais e itens de estoque" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Ícone padrão do local de estoque" -#: common/setting/system.py:759 +#: common/setting/system.py:751 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:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Mostrar Itens de Estoque Instalados" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Exibir itens de estoque instalados nas tabelas de estoque" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Verificar LDM ao instalar itens" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Permitir Fora de Transferência" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Produção" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Exigir proprietário responsável" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 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:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Requer Parte Ativa" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "Impedir a criação de ordem para partes inativas" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Exigir parte bloqueada" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "Impedir criação de pedidos para peças desbloqueadas" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Exigir validade, BOM" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Exigir pedidos secundários fechados" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Pedido de Produção Externo" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Ativar funcionalidade de pedido de construção externa" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Bloquear Até Passagem de Testes" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Pedidos de vendas marcados como enviados automaticamente serão concluídos, ignorando o status \"enviado\"" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Modelo de Referência de Pedidos de Compras" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Editar Pedidos de Compra Concluídos" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Converter Moeda" -#: common/setting/system.py:931 +#: common/setting/system.py:939 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:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Completar automaticamente os pedidos de Compra" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Ativar senha esquecida" -#: common/setting/system.py:946 +#: common/setting/system.py:954 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:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Ativar cadastro" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Ativar SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Ativar SSO na página de acesso" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Ativar registro SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Ativar sincronização de grupo SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "Chave de grupo SSO" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "Mapa do grupo SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Remover grupos fora do SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email obrigatório" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Exigir do usuário o e-mail no cadastro" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Auto-preencher usuários SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Enviar email duplo" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Senha duas vezes" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "No registro pedir aos usuários duas vezes pela senha" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Domínios permitidos" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Grupo no cadastro" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Forçar AMF" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Os usuários devem usar uma segurança multifatorial." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Verificar extensões na inicialização" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Verificar por atualizações de extensão" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 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:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Ativar integração URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Ativar extensão para adicionar rotas URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Ativar integração de navegação" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Ativar extensões para integrar à navegação" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Ativar integração com aplicativo" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Ativar extensões para adicionar aplicativos" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Ativar integração com agendas" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Ativar extensões para executar tarefas agendadas" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Ativar integração de eventos" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Ativar extensões para responder a eventos internos" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Ativar integração de interface" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Ativar extensões para integrar na interface do usuário" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "Ativar integração com o e-mail" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Ativar extensão para processar e-mails de saída/entrada" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Ativar códigos de projeto" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Ativar códigos de projeto para rastrear projetos" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 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:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Excluir Locais Externos" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Período de contagem automática" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Exibir nomes completos dos usuários" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 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:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Exibir Perfis de Usuário" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Exibir Perfis de Usuários em sua página de perfil" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Ativar Dados da Estação de Teste" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 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:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "Últimas máquinas de impressão utilizadas" msgid "Save the last used printing machines for a user" msgstr "Salvar as últimas máquinas de impressão usadas para um usuário" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "Todos os modelos" @@ -4012,8 +4077,8 @@ msgstr "A peça interna está ativa" msgid "Supplier is Active" msgstr "O fornecedor está Ativo" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Fabricante" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Endereço de e-mail do contato" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Contato" @@ -4111,7 +4176,7 @@ msgstr "CNPJ" msgid "Company Tax ID" msgstr "CNPJ da empresa" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Endereço" @@ -4203,12 +4268,12 @@ msgstr "Notas de envio para uso interno" msgid "Link to address information (external)" msgstr "Link para as informações do endereço (externo)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Fabricante da peça" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Peça base" @@ -4221,8 +4286,8 @@ msgstr "Selecionar peça" msgid "Select manufacturer" msgstr "Selecionar fabricante" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "NPF" @@ -4250,8 +4315,8 @@ msgstr "Unidades de pacote devem ser maior que zero" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Fornecedor" msgid "Select supplier" msgstr "Selecione o fornecedor" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Unidade de reserva de estoque fornecedor" @@ -4290,15 +4355,15 @@ msgstr "URL do link externo da peça do fabricante" msgid "Supplier part description" msgstr "Descrição da peça fornecedor" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "preço base" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Taxa mínima (ex.: taxa de estoque)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Embalagem" @@ -4315,7 +4380,7 @@ msgstr "Quantidade de embalagens" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "múltiplo" @@ -4339,23 +4404,23 @@ msgstr "Data da última atualização de dados disponíveis" msgid "Supplier Price Break" msgstr "Parcelamento de Preço do Fornecedor" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Moeda padrão utilizada para este fornecedor" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Nome da Empresa" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Em Estoque" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Dados da linha original" msgid "Errors" msgstr "Erros" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Válido" @@ -4623,7 +4688,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:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Desconhecido" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupo" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Referência do Pedido" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Pendente" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Tem código do projeto" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Criado por" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Criado Antes" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Criado Após" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Tem Data Inicial" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Data Inicial Antes" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Data Inicial Após" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Tem Data Prevista" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Data Prevista Antes" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Data Prevista Antes" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Tem Preço" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Concluído Antes" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Concluído Após" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Pedido de Produção Vencido" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Pedido" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Pedido Completo" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Peça Interna" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Pedido pendente" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Concluído" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Possui Envio" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Pedido de Compra" msgid "Sales Order" msgstr "Pedido de Venda" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Preço Total" msgid "Total price for this order" msgstr "Preço total deste pedido" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Moeda do Pedido" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descrição do pedido (opcional)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Selecione o código do projeto para este pedido" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Link para página externa" @@ -4930,7 +4995,7 @@ msgstr "Data inicial" msgid "Scheduled start date for this order" msgstr "Data de início programada para esta encomenda" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Data Prevista" @@ -4963,12 +5028,12 @@ msgstr "Ponto de contato para este pedido" msgid "Company address for this order" msgstr "Endereço da empresa para este pedido" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Referência do pedido" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Situação" @@ -4992,15 +5057,15 @@ msgstr "Código de referência do pedido fornecedor" msgid "received by" msgstr "recebido por" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Dia que o pedido foi concluído" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Destino" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Destino para os itens recebidos" @@ -5024,616 +5089,624 @@ msgstr "Quantidade deve ser um número positivo" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Cliente" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Empresa para qual os itens foi vendidos" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Situação do Pedido de Venda" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Referência do Cliente " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Código de Referência do pedido do cliente" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Data de envio" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "enviado por" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "O pedido já está completo" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "O pedido já está cancelado" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Apenas um pedido aberto pode ser marcado como completo" -#: order/models.py:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "O pedido está bloqueado e não pode ser modificado" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Quantidade do item" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Referência do Item em Linha" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Observações do Item de Linha" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Descrição do item de linha (opcional)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Contexto adicional para esta linha" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Preço Unitário" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Item de linha de pedido de compra" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "A peça do fornecedor deve corresponder ao fornecedor" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "Pedido de produção deve ser marcada como externa" -#: order/models.py:1951 +#: order/models.py:1971 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:1957 +#: order/models.py:1977 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:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Fornecedor da Peça" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Recebido" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Número de itens recebidos" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Preço de Compra" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Preço unitário de compra" -#: order/models.py:2025 +#: order/models.py:2056 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:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Linha Extra do Pedido de Compra" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Item de Linha de Pedido de Vendas" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Preço de Venda" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Preço de venda unitário" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Enviado" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Quantidade enviada" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Envio do Pedido de Venda" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Data do envio" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Data de Entrega" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Data da entrega do envio" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Verificado por" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Usuário que verificou este envio" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Envio" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Número do Envio" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Número de rastreio" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Informação de rastreamento" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Quantidade alocada deve ser maior que zero" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Linha" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Item" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Copiar linhas" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Duplicar Pedido" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "ID do pedido inválido" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "O pedido não pode ser cancelado" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Mesclar Itens" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Código (SKU)" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Número Interno da Peça" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Nome Interno da Peça" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Código de barras" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Código de barras lido" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Código de barras já está em uso" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Itens Alocados" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Os seguintes números de série não estão disponíveis" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "Categoria da Peça" msgid "Part Categories" msgstr "Categorias de Peça" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Local Padrão" @@ -5849,7 +5926,7 @@ msgstr "Palavras-chave padrão para peças nesta categoria" msgid "Icon" msgstr "Ícone" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ícone (opcional)" @@ -5870,984 +5947,1012 @@ msgstr "Valor Padrão" msgid "Default Parameter Value" msgstr "Valor Padrão do Parâmetro" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Peças" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Nome da peça" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "É um modelo" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Descrição da peça (opcional)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Palavras-chaves" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Categoria da Peça" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Validade Padrão" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Estoque Mínimo" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Criação de Usuário" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Data" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 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:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Obrigatório" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Sub peça" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Itens de Estoque" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Estoque Total" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Estoque Inicial" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Atualizar" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Ignorar Linhas Inválidas" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Habilite essa opção para ignorar linhas inválidas" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "Margem" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Paisagem" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtros" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Arquivo Modelo" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "Mesclar" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Largura [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Largura da Etiqueta, em mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Altura [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Altura da Etiqueta, em mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Responsável" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Selecionar Responsável" @@ -8558,7 +8663,7 @@ msgstr "Selecionar Responsável" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Permissão para exibir itens" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Adicionar" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Permissão para adicionar itens" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Alterar" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Permissões para editar itens" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Excluir" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Permissão para excluir itens" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Interno" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Convidado" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Idioma" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Idioma preferencial para o usuário" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Tema" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Widgets" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Nome de Exibição" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Nome de exibição escolhido para o usuário" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Cargo" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Mensagem de status do usuário" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Tipo de Usuário" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Organização" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ro/LC_MESSAGES/django.po index 125a9f46aa..b3db2e6899 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Romanian\n" "Language: ro_RO\n" @@ -89,6 +89,7 @@ msgstr "Nu s-a putut converti {original} în {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Cantitate furnizata nevalida" @@ -104,11 +105,11 @@ msgstr "Enter Date" msgid "Invalid decimal value" msgstr "Valoare zecimală nevalidă" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Eroare de conexiune" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Serverul a răspuns cu un cod de stare invalid" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Excepție apărută" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Serverul a răspuns cu o valoare de Content-Length invalidă" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Dimensiunea imaginii este prea mare" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Descărcarea imaginii a depăşit dimensiunea maximă" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Serverul la distanță a returnat un răspuns gol" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "URL-ul furnizat nu este un fișier imagine valid" @@ -219,7 +220,7 @@ msgstr "Conectați-vă la aplicație" msgid "Email" msgstr "E-mail" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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." @@ -263,124 +264,108 @@ msgstr "Referința trebuie să corespundă modelului necesar" msgid "Reference number is too large" msgstr "Numărul de referință este prea mare" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Alegere invalidă" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Nume" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Descriere" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Descriere (opțional)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Cale" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Duplicate nume nu poate exista sub acelaşi părinte" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Note Markdown (opțional)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Date Cod de Bare" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Date coduri de bare terțe" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Date Cod de Bare" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Hash unic al codului de bare" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Cod de bare existent găsit" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Eroare de server" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "A fost înregistrată o eroare de către server." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Trebuie sa fie un număr valid" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Monedă" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Selectați moneda din opțiunile disponibile" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Acest câmp nu poate fi null." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Valoare invalidă" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Imagini de la distanţă" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL-ul imaginii la distanţă" - -#: InvenTree/serializers.py:818 -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:825 -msgid "Failed to download image from remote URL" -msgstr "Descărcarea imaginii din URL-ul de la distanță a eșuat" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Format de tip de conținut nevalid" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "Tipul de conținut nu a fost găsit" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "Tipul de conținut nu se potrivește cu mixin necesar clasei" @@ -552,8 +537,8 @@ msgstr "Unitate fizică nevalidă" msgid "Not a valid currency code" msgstr "Nu este un cod valutar valid" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Starea comenzii" @@ -561,21 +546,21 @@ msgstr "Starea comenzii" msgid "Parent Build" msgstr "Construcție părinte" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "İnclude variante" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "İnclude variante" msgid "Part" msgstr "Piesă" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Categorie" @@ -605,7 +590,7 @@ msgstr "Categorie" msgid "Ancestor Build" msgstr "Ancestor Build" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Alocate mie" @@ -653,11 +638,11 @@ msgstr "Finalizat înainte de" msgid "Completed after" msgstr "Finalizat după" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Dată min" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Dată maximă" @@ -669,16 +654,16 @@ msgstr "Exclude arbore" msgid "Build must be cancelled before it can be deleted" msgstr "Construcția trebuie anulată înainte de a putea fi ștearsă" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Consumabile" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opţional" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Asamblate" @@ -687,32 +672,32 @@ msgstr "Asamblate" msgid "Tracked" msgstr "Urmarit" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testabilă" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Comandă restantă" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Alocate" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Consumat" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Pe comandă" @@ -720,7 +705,7 @@ msgstr "Pe comandă" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Comenzi de Producție" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Locatie" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Ieșire" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Referință comandă producție" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Stare producției" msgid "Build status code" msgstr "Cod status producție" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Cod lot" @@ -870,8 +855,8 @@ msgstr "Cod lot" msgid "Batch code for this build output" msgstr "Cod de lot pentru această producție" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Data creării" @@ -891,7 +876,7 @@ msgstr "Data finalizării țintă" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Data țintă pentru finalizarea construcției. Construcția va fi depășită după această dată." -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Data completării" @@ -907,8 +892,8 @@ msgstr "Emis de" msgid "User who issued this build order" msgstr "Utilizatorul care a emis această comandă de producție" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Responsabil" @@ -917,12 +902,12 @@ msgstr "Responsabil" msgid "User or group responsible for this build order" msgstr "Utilizatorul sau grupul responsabil pentru această comandă de producție" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Link extern" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link către URL-ul extern" @@ -934,8 +919,8 @@ msgstr "Prioritate de construire" msgid "Priority of this build order" msgstr "Prioritatea acestei comenzi de producție" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Cod proiect" @@ -968,7 +953,7 @@ msgstr "A fost finalizată o comandă de producție" msgid "Serial numbers must be provided for trackable parts" msgstr "Numerele de serie trebuie furnizate pentru piesele urmăribile" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nu este specificată nicio ieșire de producție" @@ -980,47 +965,47 @@ msgstr "Construcția este deja finalizată" msgid "Build output does not match Build Order" msgstr "Construcția nu se potrivește cu Comanda de producție" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Cantitatea trebuie să fie mai mare decât zero" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Cantitatea nu poate fi mai mare decât cantitatea de ieşire" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "Construcția nu a trecut toate testele necesare" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Construcția {serial} nu a trecut toate testele necesare" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "Stocurile alocate sunt încă în producţie" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "Nu se poate finaliza parțial o construcție cu elemente alocate" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Element linie comandă de producție" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Construiește obiectul" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Construiește obiectul" msgid "Quantity" msgstr "Cantitate" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Cantitatea necesară pentru comanda de producție" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Cantitatea de stoc consumată" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Articolul contruit trebuie să specifice o ieșire de construcție, deoarece piesa principală este marcată ca urmăribilă." -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Articolul din stoc selectat nu se potrivește cu linia BOM" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "Cantitatea alocată trebuie să fie mai mare decât zero" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Cantitatea trebuie sa fie 1 pentru stoc serializat" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Cantitate alocata ({q}) nu trebuie sa depaseasca cantitatea disponibila de stoc ({a})" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Articolul din stoc este supra alocat" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Articol Stoc" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Locație articol stoc" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Cantitatea de stoc alocată pentru construcție" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Instalează în" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Destinație articol in stoc" @@ -1099,7 +1084,7 @@ msgstr "Destinație articol in stoc" msgid "Build Level" msgstr "Nivel de construcție" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Numele Piesei" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Număr de serie" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Acceptați Incomplet" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "Producție" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "Nume Categorie Piesă" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "În Producţie" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Stoc extern" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Stoc disponibil" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "Etichetă Cod Proiect" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Descrierea proiectului" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Utilizatorul sau grupul responsabil pentru acest proiect" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Valoarea nu trece verificările de validare" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Utilizator" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Preț" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Preț unitar la cantitatea specificată" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Punct final" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Punctul final la care acest webhook este primit" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Nume pentru acest webhook" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Activ" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Este acest webhook activ" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token-ul" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token pentru acces" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Secret" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Host" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Host de la care acest mesaj a fost primit" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id-ul" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Titlu" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Publicată" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Rezumat" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Citit" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "A fost citită această știre?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Fișier imagine" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Unitate personalizată" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Numele unității trebuie să fie un identificator valid" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Numele unității" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Comentariu" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Comentariu atașament" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Data încărcării" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Numele statului" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Descrierea listei de selecție" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Descrierea parametrului" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "Nume fișier" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Versiune Componente" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Șablon Cod lot" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "Șablon pentru generarea codurilor de lot implicite pentru elementele de stoc" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Necesită Titularul Responsabil" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Titularul responsabil trebuie să fie atribuit fiecărei comenzi" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Comenzi externe de producție" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blochează până la trecerea testelor" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Comenzile de vânzare marcate ca expediate vor fi finalizate automat, ocolind starea \"expediate\"" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Activează parola uitată" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Activare parolă uitată funcție pe paginile de autentificare" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Parola de două ori" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "La înscriere, cere de două ori parola lor" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 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:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "Descrierea piesei furnizorului" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Id comandă" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Descrierea comenzii (opțional)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Descrierea elementului de rând (opțional)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Introduceți codul lotului pentru articolele din stoc primite" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "Este versiune" msgid "Has Revisions" msgstr "Are Versiuni" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Descrierea piesei (opțional)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Versiunea" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Este aceasta parte o versiune a unei alte părți?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Versiune Din" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Responsabil pentru acest capitol" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Descriere test" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Introduceți descrierea pentru acest test" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Este necesar acest test pentru a trece?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Versiunea" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "Descrierea piesei" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Descrierea detaliată a fișierului" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Descriere fișier Asset" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Proprietar" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Codul lotului pentru acest element din stoc" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/ru/LC_MESSAGES/django.po index 7626cc3fdd..34094be307 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Russian\n" "Language: ru_RU\n" @@ -89,6 +89,7 @@ msgstr "Невозможно преобразовать {original} в {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "недопустимое количество" @@ -104,11 +105,11 @@ msgstr "Введите дату" msgid "Invalid decimal value" msgstr "Не верное десятичное значение" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Ошибка соединения" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Сервер ответил неверным кодом статуса" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Произошло исключение" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Сервер ответил неверным значением Контент-Длина" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Изображение слишком большое" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Загрузка изображения превышен максимальный размер" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Удаленный сервер вернул пустой ответ" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Предоставленный URL не является допустимым файлом изображения" @@ -219,7 +220,7 @@ msgstr "Войти в приложение" msgid "Email" msgstr "Электронная почта" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Вы должны включить двухфакторную аутентификацию, прежде чем делать что-нибудь еще." @@ -263,124 +264,108 @@ msgstr "Ссылка должна соответствовать шаблону msgid "Reference number is too large" msgstr "Номер ссылки слишком большой" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Неверный выбор" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Название" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Описание" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Описание (необязательно)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Путь" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Повторяющиеся имена не могут существовать под одним и тем же родителем" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Записи о скидке (необязательно)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Данные штрихкода" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Данные стороннего штрих-кода" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Хэш штрих-кода" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Уникальный хэш данных штрих-кода" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Обнаружен существующий штрих-код" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Ошибка сервера" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Сервер зарегистрировал ошибку." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Должно быть действительным номером" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Валюта" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Выберите валюту из доступных вариантов" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Это поле не может быть пустым." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Неверное значение" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Удаленное изображение" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "ССЫЛКА файла изображения на удаленном сервере" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Загрузка изображений с удаленного URL-адреса не включена" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Не удалось загрузить изображение из URL адреса" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Неверный формат типа содержимого" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "Тип содержимого не найден" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "Тип содержимого не соответствует требуемому классу миксина" @@ -552,8 +537,8 @@ msgstr "Неверная физическая единица" msgid "Not a valid currency code" msgstr "Неверный код валюты" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Статус заказа" @@ -561,21 +546,21 @@ msgstr "Статус заказа" msgid "Parent Build" msgstr "Родительский заказ на производство" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Включая варианты" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Включая варианты" msgid "Part" msgstr "Деталь" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Категория" @@ -605,7 +590,7 @@ msgstr "Категория" msgid "Ancestor Build" msgstr "Родительская сборка" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Назначено мне" @@ -653,11 +638,11 @@ msgstr "Завершено до" msgid "Completed after" msgstr "Завершено после" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "Минимальная дата" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Максимальная дата" @@ -669,16 +654,16 @@ msgstr "Исключить дерево" msgid "Build must be cancelled before it can be deleted" msgstr "Заказ на производство должен быть отменен перед удалением" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Расходник" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Необязательно" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Сборная деталь" @@ -687,32 +672,32 @@ msgstr "Сборная деталь" msgid "Tracked" msgstr "Отслеживается" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Тестируемая" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Невыполненные заказы" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Зарезервировано" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Потреблено" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "В заказе" @@ -720,7 +705,7 @@ msgstr "В заказе" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Заказ на производство" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Расположение" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Выход" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Ссылка на заказ на производство" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Статус заказа на производство" msgid "Build status code" msgstr "Код статуса заказа на производство" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Код партии" @@ -870,8 +855,8 @@ msgstr "Код партии" msgid "Batch code for this build output" msgstr "Код партии для продукции" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Дата создания" @@ -891,7 +876,7 @@ msgstr "Целевая дата завершения" msgid "Target date for build completion. Build will be overdue after this date." msgstr "Целевая дата для заказа на производства. Заказ будет просрочен после этой даты." -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Дата завершения" @@ -907,8 +892,8 @@ msgstr "Создано" msgid "User who issued this build order" msgstr "Пользователь, создавший этот заказ на производство" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ответственный" @@ -917,12 +902,12 @@ msgstr "Ответственный" msgid "User or group responsible for this build order" msgstr "Пользователь, ответственный за этот заказ на производство" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Внешняя ссылка" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Ссылка на внешний URL" @@ -934,8 +919,8 @@ msgstr "Приоритет производства" msgid "Priority of this build order" msgstr "Приоритет этого заказа на производство" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Код проекта" @@ -968,7 +953,7 @@ msgstr "Заказ на производство был завершен" msgid "Serial numbers must be provided for trackable parts" msgstr "Для отслеживаемых деталей должны быть указаны серийные номера" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Продукция не указана" @@ -980,47 +965,47 @@ msgstr "Продукция уже произведена" msgid "Build output does not match Build Order" msgstr "Продукция не совпадает с заказом на производство" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Количество должно быть больше нуля" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Количество не может быть больше количества продукции" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "Выход сборки не прошёл все необходимые тесты" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Сборка {serial} не прошла все необходимые тесты" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "Выделенные на складе товары все еще находятся в производстве" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "Невозможно частично завершить выход сборки с распределёнными элементами" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Номер позиции для производства" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Объект производства" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Объект производства" msgid "Quantity" msgstr "Количество" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Требуемое количество для заказа на производство" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Количество израсходованного запаса" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "Элемент производства должен указать продукцию, как главную деталь помеченную как отслеживаемая" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Выбранная складская позиция не соответствует позиции в BOM" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Количество должно быть 1 для сериализованных запасов" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "Резервируемое количество ({q}) не должно превышать доступное количество на складе ({a})" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Складская позиция перераспределена" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Складская позиция" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Исходная складская позиция" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Количество на складе для производства" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Установить в" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Целевая складская позиция" @@ -1099,7 +1084,7 @@ msgstr "Целевая складская позиция" msgid "Build Level" msgstr "Уровень сборки" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Наименование детали" @@ -1135,7 +1120,7 @@ msgstr "Для отслеживаемых деталей должно быть msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "Требуется целое количество, так как материал содержит отслеживаемые детали" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Серийные номера" @@ -1156,8 +1141,8 @@ msgstr "Автоматически выделить серийные номер msgid "Automatically allocate required items with matching serial numbers" msgstr "Автоматически зарезервировать необходимые элементы с соответствующими серийными номерами" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Следующие серийные номера уже существуют или недействительны" @@ -1245,7 +1230,7 @@ msgstr "Подтвердите, что складские позиции не б msgid "Required stock has not been fully allocated" msgstr "Необходимые запасы не были полностью зарезервированы" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Разрешить незавершенные производимые детали" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part должна указывать на ту же часть, msgid "Item must be in stock" msgstr "Элемент должен быть в наличии" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Превышено доступное количество ({q})" @@ -1306,7 +1291,7 @@ msgstr "Продукция должна быть указан для резер msgid "Build output cannot be specified for allocation of untracked parts" msgstr "Продукция не может быть указана для резервирования не отслеживаемых частей" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Необходимо указать резервируемые элементы" @@ -1386,9 +1371,9 @@ msgstr "Установить в" msgid "Build" msgstr "Сборка" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Деталь поставщика" @@ -1404,7 +1389,7 @@ msgstr "Ссылка на сборку" msgid "Part Category Name" msgstr "Название категории детали" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Отслеживание" @@ -1412,29 +1397,29 @@ msgstr "Отслеживание" msgid "Inherited" msgstr "Унаследованные" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Есть варианты" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Позиция BOM" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "В производстве" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Запланировано к сборке" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Внешний склад" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Доступный запас" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "У пользователя нет прав для удаления этих вложений" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "У пользователя нет прав на удаление этого вложения" @@ -1554,610 +1543,634 @@ msgstr "Нет плагина" msgid "Project Code Label" msgstr "Название кода проекта" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Обновлено" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Временная метка последнего обновления" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Обновлено" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Пользователь, последний раз обновивший этот объект" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Уникальный код проекта" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Описание проекта" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Пользователь или группа, ответственные за этот проект" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Ключ настроек" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Значения настроек" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Выбранное значение не является допустимым" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Значение должно быть булевым" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Значение должно быть целым числом" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Значение должно быть допустимым числом" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Значение не прошло проверку" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Строка ключа должна быть уникальной" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Пользователь" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Скидка распространяется на заданное количество" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Цена" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Цена за единицу для указанного количества" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Конечная точка" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Конечная точка, на которой принимается этот веб-хук" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Имя для этого веб-хука" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Активный" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Этот веб-хук активен?" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Токен" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Токен для доступа" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Секрет" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Общий ключ для HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID Сообщения" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Уникальный идентификатор этого сообщения" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Хост" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Хост, с которого было получено это сообщение" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Заголовок" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Заголовок этого сообщения" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Тело" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Текст этого сообщения" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Конечная точка, на которую было получено это сообщение" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Работал над" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Работа над этим сообщением завершена?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Код" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Заголовок" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Ссылка" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Опубликовано" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Автор" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Итого" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Читать" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Эта новость была прочитана?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Файл изображения" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Тип целевой модели для этого изображения" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "ID целевой модели для этого изображения" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Пользовательская единица измерения" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Символ единицы должен быть уникальным" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Имя единицы должно быть действительным идентификатором" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Название единицы" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Символ" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Обозначение единицы измерения (необязательно)" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Определение" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Определение единицы измерения" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Вложения" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Файл не найден" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Отсутствует внешняя ссылка" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Тип модели" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Тип целевой модели для изображения" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Выберите файл для вложения" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Комментарий" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Описание вложения" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Дата загрузки" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Дата загрузки файла" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Размер файла" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Размер файла в байтах" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Указан недопустимый тип модели для вложения" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Пользовательское состояние" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Пользовательские состояния" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Группа статусов" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Группа статусов, которая будет дополнена пользовательским состоянием" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Логическое состояние" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "Логическое состояние, соответствующее пользовательскому состоянию в бизнес-логике" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Значение" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "Числовое значение, которое будет сохранено в базе данных" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Название состояния" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Метка" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Метка, которая будет отображаться на фронтенде" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Цвет" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Цвет отображения в интерфейсе" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Модель" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Модель, с которой связано это состояние" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Необходимо выбрать модель" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Необходимо выбрать ключ" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Логическое состояние должно быть выбрано" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "Ключ должен отличаться от логического ключа" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Должен быть указан корректный класс ссылочного статуса" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "Состояние должно отличаться от других логических состояний выбранного статуса" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "Логическое состояние должно быть из множества логических состояний выбранного статуса" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "Имя должно отличаться от имен эталонного статуса" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Список выбора" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Списки выбора" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Название списка выбора" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Описание списка выбора" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Заблокирована" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Этот список выбора заблокирован?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Можно ли использовать этот список выбора?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Исходный плагин" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Плагин, который предоставляет список выбора" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Исходная строка" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "Необязательная строка, определяющая источник, используемый для этого списка" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Запись по умолчанию" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Вариант по умолчанию для этого списка выбора" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Создано" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "Дата и время создания списка выбора" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Последнее обновление" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "Дата и время последнего обновления списка выбора" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Вариант списка выбора" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Варианты списка выбора" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Список выбора, к которому относится данный вариант" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Значение варианта списка выбора" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Метка для элемента списка выбора" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Описание варианта списка выбора" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Активен ли варианта списка выбора?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Шаблон параметра" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "Шаблоны параметров" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "У параметров-переключателей не может быть единицы измерения" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "У параметров-переключателей не может быть вариантов" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Варианты должны быть уникальными" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Имя шаблона параметров должно быть уникальным" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "Тип целевой модели для этого шаблона параметра" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Название параметра" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Единица измерения" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Физическая единица этого параметра" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Описание параметра" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Переключатель" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Этот параметр является переключателем?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Варианты" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Возможные варианты этого параметра (разделить запятой)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Список выбора для этого параметра" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Включено" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "Включен ли этот шаблон параметра?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "Параметр" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "Параметры" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Недопустимое значение параметра" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Указан неверный тип модели для параметра" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "ID модели" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "ID целевой модели для этого параметра" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Шаблон" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "Шаблон параметра" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Данные" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Значение параметра" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Значение параметра" msgid "Note" msgstr "Заметка" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Опциональное поле записей" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Сканирование штрихкодов" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Данные штрихкода" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Пользователь, который сканировал штрих-код" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Метка времени" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Дата и время сканирования штрих-кода" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "URL-адрес, обработавший штрихкод" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Контекст" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Контекстные данные для сканирования штрих-кода" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Ответ" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Данные ответа от сканирования штрихкода" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Результат" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "Сканирование штрихкода было успешным?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Произошла ошибка" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "Сообщение электронной почты" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "Сообщения электронной почты" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Объявлено" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Отправлено" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Неудача" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Доставлено" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Подтверждено" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Входящее" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Исходящее" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Без ответа" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Отслеживать доставку" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Отслеживать прочтение" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Отслеживать клики" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "Глобальный идентификатор" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "Идентификатор этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "ID цепочки" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "Идентификатор темы этого сообщения (может быть предоставлен внешней системой)" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Цепочка" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Связанная цепочка для этого сообщения" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "Приоритет" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "Цепочка электронной почты" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "Цепочки электронной почты" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Ключ" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "Уникальный ключ для этой цепочки (используется для идентификации цепочки)" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Уникальный идентификатор этой цепочки" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Запущено внутренне" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Эта цепочка была начата внутри?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Дата и время создания цепочки" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Дата и время последнего обновления цепочки" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Полученные элементы" @@ -2457,7 +2470,7 @@ msgstr "Имя файла" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Тип модели" @@ -2601,13 +2614,13 @@ msgstr "Интервал обновления курса валют" msgid "How often to update exchange rates (set to zero to disable)" msgstr "Как часто обновлять курс валют (установите \"ноль\", чтобы выключить)" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "дней" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Модуль обновления валюты" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Скачать по ссылке" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "Разрешить загрузку удаленных изображений и файлов по внешнему URL" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "Ограничение размера загрузки" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Максимально допустимый размер загрузки для удалённого изображения" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "User-Agent, используемый для загрузки из URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Строгая проверка URL-адреса" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Требуется спецификация схемы при проверке URL-адресов" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Интервал проверки обновлений" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "Как часто проверять наличие обновлений (установите ноль чтобы выключить)" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Автоматическое резервное копирование" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Включить автоматическое резервное копирование базы данных и медиа-файлов" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Интервал резервного копирования" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Укажите количество дней между событиями автоматического резервного копирования" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Интервал удаления задачи" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "Результаты фоновых задач будут удалены после указанного количества дней" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Интервал удаления журнала ошибок" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "Журналы ошибок будут удалены после указанного количества дней" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Интервал удаления уведомления" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "Уведомления пользователя будут удалены после указанного количества дней" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "Интервал удаления электронной почты" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "Сообщения электронной почты будут удалены через указанное количество дней" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "Защитить журнал электронной почты" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "Предотвращать удаление записей журнала электронной почты" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Поддержка штрих-кодов" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "Включить поддержку сканера штрих-кодов в веб-интерфейсе" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Сохранять результаты сканирования штрихкодов" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "Сохранять результаты сканирования штрихкодов в базе данных" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Максимальное количество сохранённых сканирований штрихкодов" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "Максимальное число результатов сканирования штрихкодов для хранения" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Задержка сканирования штрих-кода" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Время задержки обработки штрих-кода" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Поддержка веб-камер штрих-кодов" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "Разрешить сканирование штрих-кода через веб-камеру в браузере" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Показать данные штрих-кода" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Отображать данные штрих-кода в браузере в виде текста" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Плагин генерации штрих-кода" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "Плагин для использования внутренней генерации данных штрих-кодов" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Ревизия детали" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Включить поле ревизии для элемента" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Только ревизия сборки" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Разрешить ревизии только для сборочных деталей" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Разрешить удаление из заказа" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "Разрешить удаление частей, которые используются в заказе" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Регулярное выражение IPN" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Шаблон регулярного выражения для сопоставления IPN детали" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Разрешить повторяющиеся IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Разрешить нескольким элементам использовать один и тот же IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Разрешить редактирование IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "Разрешить изменение значения IPN при редактировании детали" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Скопировать данные BOM детали" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "Копировать данные BOM по умолчанию при дублировании детали" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Скопировать данные параметров детали" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "Копировать данных параметров по умолчанию при дублировании детали" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Скопировать данные тестирования детали" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "Копировать данные тестирования по умолчанию при дублировании детали" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Скопировать параметры по шаблону категории" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "Копировать параметры по шаблону категории при создании детали" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "По умолчанию детали являются шаблонами" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "По умолчанию детали могут быть собраны из других компонентов" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Компонент" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "По умолчанию детали могут использоваться в качестве суб-компонентов" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Можно купить" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Можно продавать" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Детали продаются по умолчанию" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "По умолчанию детали являются отслеживаемыми" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Виртуальная" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Детали являются виртуальными по умолчанию" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Показывать связанные детали" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Отображать связанные детали для элемента" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Начальные данные о запасах" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "Разрешить создание начального запаса при добавлении новой детали" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Исходные данные о поставщике" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "Разрешить создание исходных данных о поставщике при добавлении новой детали" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Формат отображения детали" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Формат для отображения имени детали" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Значок раздела по умолчанию" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "Значок категории по умолчанию (пустой означает отсутствие значка)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Минимальные Цены Десятичные Значки" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Макс. Цены десятичные знаки" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "Минимальное количество десятичных знаков при отображении данных о ценах" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Использовать цены поставщика" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Изменить историю покупки" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Ценообразование по историческим заказам на поставку отменяет различия в ценах поставщиков" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Использовать цены из складских позиций" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "Использовать расценки из ручного ввода данных о запасах для расчета цен" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Возраст цен складских позиций" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "Исключить складские позиции старше указанного количества дней с расчёта цен" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Использовать варианты цен" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Включить разницу цен поставщиков при расчетах цен" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Только Активные Варианты" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "Использовать только активные запчасти для расчета стоимости варианта" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Автоматическое обновление цен" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "Автоматически обновлять цены деталей при изменении внутренних данных" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Интервал пересчета цен" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "Количество дней до автоматического обновления цены" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Внутренние цены" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Разрешить внутренние цены для частей" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Переопределение внутренней цены" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "При наличии внутренних цен переопределить ценовой диапазон" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Включить печать этикеток" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Включить печать этикеток из веб-интерфейса" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Изображение меток DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "Разрешение DPI при создании файлов изображений для печати этикеток плагинов" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Включить отчеты" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Включить генерацию отчетов" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Режим отладки" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Генерировать отчеты в режиме отладки (вывод HTML)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Журнал ошибок отчета" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Журнал ошибок, которые возникают при создании отчетов" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Размер страницы" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Размер страницы по умолчанию для PDF отчетов" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Принудительное применение единиц измерения параметров" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "Если введены единицы, значения параметра должны соответствовать указанным единицам измерения" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Глобально уникальные серийные номера" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "Серийные номера для складских позиций должны быть уникальными глобально" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Удалить исчерпанный запас" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "Определяет поведение по умолчанию, когда складская позиция заканчивается" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Код партии Шаблона" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "Шаблон для создания кодов партии по умолчанию для складских позиций" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Срок годности Запасов" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Включить функцию истечения срока годности" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Разрешить продажу просроченных запасов" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Время Залежалости Запасов" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "Количество дней перед тем как складская единица будет считаться просроченной" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Использовать просроченные остатки в производстве" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Разрешить использовать просроченные остатки в производстве" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Контроль за собственными запасами" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Разрешить владельцу контролировать расположение складов и номенклатуры" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Значок местоположения по умолчанию" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Значок местоположения склада по умолчанию (пустой означает отсутствие значка)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Показать установленные складские позиции" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Отображать установленные складские позиции в складских таблицах" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Проверять спецификацию при установке изделий" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "Установленные единица хранения должны присутствовать в спецификации для родительской детали" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Разрешить передачу товара, отсутствующего на складе" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "Разрешить перемещение товаров, которых нет на складе, между складами" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Паттерн ссылки заказа на производство" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "Поле требуемого паттерна для создания ссылки заказа на производство" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Требуется ответственный владелец" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Ответственный владелец должен быть назначен для каждого заказа" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Требовать активную деталь" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "Запрещать создание заказов на сборку для неактивных деталей" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Требовать заблокированную деталь" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "Запрещать создание заказов на сборку для разблокированных деталей" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Требовать валидную спецификацию" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "Запрещать создание заказов на сборку, пока спецификация не будет подтверждена" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Требовать закрытия дочерних заказов" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "Запрещать завершение заказа на сборку, пока не закрыты все дочерние заказы" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Сторонний заказ на сборку" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Включить функциональность сторонних заказов на сборку" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Блокировать до прохождения тестов" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Заказы на продажу, помеченные как отгруженные, будут автоматически завершены, минуя статус 'отгружено'" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Шаблон ссылки заказа на закупку" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "Требуемый шаблон для генерации поля ссылки заказа на закупку" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Редактировать завершённые заказы на закупку" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "Разрешить редактирование заказов после их отправки или завершения" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Конвертировать валюту" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "Преобразовывать стоимость товара в базовую валюту при поступлении на склад" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Автоматически выполнять заказы на закупку" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "Автоматически отмечать заказы на закупку как завершённые при получении всех позиций" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Включить функцию восстановления пароля" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Включить функцию восстановления пароля на странице входа" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Разрешить регистрацию" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "Включить самостоятельную регистрацию пользователей на странице входа" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Включить SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Включить SSO на странице входа" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Включить регистрацию через SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "Включить самостоятельную регистрацию пользователей через SSO на странице входа" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Включить синхронизацию групп через SSO" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "Включить синхронизацию групп InvenTree с группами, предоставляемыми IdP" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "Ключ группы SSO" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Имя атрибута группы, предоставленного провайдером идентификации" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "Отображение групп SSO" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Удалять группы вне SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Необходимо указать EMail" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Требовать электронную почту при регистрации" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Автозаполнение пользователей SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "Автоматически заполнять данные пользователя из аккаунта SSO" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Написать дважды" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "При регистрации дважды спрашивать адрес электронной почты" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Пароль дважды" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "При регистрации запросить пароль у пользователей дважды" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Разрешенные домены" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "Ограничить регистрацию определёнными доменами (через запятую, начиная с @)" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Группа при новой регистрации" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Принудительное MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Пользователи должны использовать многофакторную безопасность." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "Включение этой настройки потребует от всех пользователей настройки многофакторной аутентификации. Все сессии будут отключены немедленно." -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Проверять плагины при запуске" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "Проверять, что все плагины установлены при запуске — включать в контейнерных средах" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Проверка обновлений плагинов" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Включить периодическую проверку обновлений установленных плагинов" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Включить интеграцию URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Разрешить плагинам добавлять маршруты URL" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Включить интеграцию навигации" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Разрешить плагинам интегрироваться в навигацию" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Включить интеграцию приложений" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Разрешить плагинам добавлять приложения" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Включить интеграцию расписаний" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Разрешить плагинам запускать запланированные задачи" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Включить интеграцию событий" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Разрешить плагинам реагировать на внутренние события" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Включить интеграцию интерфейса" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Разрешить плагинам интегрироваться в пользовательский интерфейс" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "Включить интеграцию почты" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Разрешить плагинам обрабатывать исходящую и входящую почту" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Включить коды проекта" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Включить коды проекта для отслеживания проектов" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "Включить инвентаризацию" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "Включить функцию записи истории уровней и стоимости запасов" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Исключить сторонний склад" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Исключить из инвентаризации единицы хранения на внешних складах" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Автоматический период инвентаризации" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "Кол-во дней между автоматических записей инвентаризации" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "Удалять устаревшие записи инвентаризаций" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "Удалять записи инвентаризаций старше N дней" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "Частота удаления записей инвентаризаций" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "Записи инвентаризации будут удалены после N дней" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "Удалять старые записи истории запасов" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "Удалять записи истории запасов старше указанного количества дней" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "Интервал удаления истории запасов" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "Записи истории запасов будут удалены через указанное количество дней" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Показывать полные имена пользователей" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Отображать полные имена пользователей вместо логинов" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Отображать профили пользователей" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Отображать профили пользователей на их странице профиля" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Добавлять данные об испытательном оборудовании" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "Добавлять данные об испытательном оборудовании в результаты тестирования" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "Включить пинг машин" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "Включить периодическую задачу пинга зарегистрированных машин для проверки их статуса" @@ -3951,6 +4008,14 @@ msgstr "Последние использованные печатающие м msgid "Save the last used printing machines for a user" msgstr "Сохранять последние использованные печатающие машины для пользователя" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "Все модели" @@ -4012,8 +4077,8 @@ msgstr "Внутренняя деталь активна" msgid "Supplier is Active" msgstr "Поставщик активен" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Производитель" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Электронная почта контакта" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Контакт" @@ -4111,7 +4176,7 @@ msgstr "Налоговый идентификатор" msgid "Company Tax ID" msgstr "Налоговый идентификатор компании" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Адрес" @@ -4203,12 +4268,12 @@ msgstr "Записи отправления для внутреннего пол msgid "Link to address information (external)" msgstr "Ссылка на адресную информацию (внешняя)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Производитель детали" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Базовая деталь" @@ -4221,8 +4286,8 @@ msgstr "Выберите деталь" msgid "Select manufacturer" msgstr "Выберите производителя" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "Артикул производителя" @@ -4250,8 +4315,8 @@ msgstr "Единицы упаковки должны быть больше ну msgid "Linked manufacturer part must reference the same base part" msgstr "Связанная деталь производителя должна ссылаться на ту же базовую деталь" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Поставщик" msgid "Select supplier" msgstr "Выберите поставщика" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Артикул поставщика" @@ -4290,15 +4355,15 @@ msgstr "Ссылка на сайт поставщика" msgid "Supplier part description" msgstr "Описание детали поставщика" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "базовая стоимость" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Минимальная плата (например, складская)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Упаковка" @@ -4315,7 +4380,7 @@ msgstr "Количество в упаковке" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "Общее количество, поставляемое в одной упаковке. Оставьте пустым для отдельных элементов." -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "множественные" @@ -4339,23 +4404,23 @@ msgstr "Дата последнего обновления данных о до msgid "Supplier Price Break" msgstr "Ценовой порог поставщика" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Валюта по умолчанию для этого поставщика" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Название компании" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "На складе" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "Ценовые пороги" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Исходные данные строки" msgid "Errors" msgstr "Ошибки" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Корректный" @@ -4623,7 +4688,7 @@ msgstr "Количество копий для печати каждой эти msgid "Connected" msgstr "Подключен" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Неизвестно" @@ -4727,7 +4792,7 @@ msgstr "Ключ свойства" msgid "Value of the property" msgstr "Значение свойства" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Группа" @@ -4751,117 +4816,117 @@ msgstr "Максимальный прогресс" msgid "Maximum value for progress type, required if type=progress" msgstr "Максимальное значение для типа прогресса, требуется, если тип=progress" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Ссылка на заказ" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Невыполненный" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Есть код проекта" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Создал" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Создано до" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Создано после" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Есть дата начала" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Дата начала до" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Дата начала после" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Есть целевая дата" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Целевая дата до" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Целевая дата после" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Имеет цену" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Завершено до" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Завершено после" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Сторонний заказ на сборку" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Заказ" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Заказ выполнен" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Внутренняя деталь" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Заказ в ожидании" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Завершённые" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Есть отгрузка" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Заказ на закупку" msgid "Sales Order" msgstr "Заказ на продажу" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Общая стоимость" msgid "Total price for this order" msgstr "Общая стоимость этого заказа" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Валюта заказа" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "Валюта заказа (оставьте пустым для использования валюты по умолчанию для компании)" @@ -4914,11 +4979,11 @@ msgstr "Адрес не соответствует выбранной компа msgid "Order description (optional)" msgstr "Описание заказа (дополнительно)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Выберите код проекта для этого заказа" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Ссылка на внешнюю страницу" @@ -4930,7 +4995,7 @@ msgstr "Начальная дата" msgid "Scheduled start date for this order" msgstr "Запланированная начальная дата этого заказа" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Целевая дата" @@ -4963,12 +5028,12 @@ msgstr "Контактное лицо по данному заказу" msgid "Company address for this order" msgstr "Адрес компании по этому заказу" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Ссылка на заказ" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Статус" @@ -4992,15 +5057,15 @@ msgstr "Номер заказа у поставщика" msgid "received by" msgstr "получил" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Дата завершения заказа" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Место хранения" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Место хранения для полученных позиций" @@ -5024,616 +5089,624 @@ msgstr "Количество должно быть положительным ч msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Покупатель" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Компания, которой детали продаются" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Статус заказа на продажу" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Ссылка клиента" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Код ссылки на заказ клиента" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Дата отгрузки" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "Отправлено" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Заказ уже выполнен" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Заказ уже отменен" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Только открытый заказ может быть отмечен как завершённый" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Заказ не может быть завершён, так как есть незавершённые отгрузки" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Заказ не может быть завершён, так как есть незавершённые распределения" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "Заказ не может быть завершён, так как есть незавершённые позиции" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "Заказ заблокирован и не может быть изменён" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Количество" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Номер позиции" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Записи о позиции" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "Целевая дата этой позиции (оставьте пустой, чтобы использовать целевую дату заказа)" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Описание позиции (необязательно)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Дополнительный контекст для этой строки" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Цена за единицу" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Позиция заказа на закупку" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Поставляемая деталь должна соответствовать поставщику" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "Заказ на сборку должен быть отмечен как внешний" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "Заказы на сборку могут быть связаны только со сборочными деталями" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "Деталь заказа на сборку должна соответствовать детали позиции" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Деталь поставщика" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Получено" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Количество полученных предметов" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Закупочная цена" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Закупочная цена" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "Внешний заказ на сборку, который будет выполнен этой позицией" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Дополнительная позиция заказа на закупку" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Позиция заказа на продажу" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "Только продаваемые детали могут быть назначены заказу на продажу" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Цена продажи" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Цена последней продажи" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Доставлен" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Отгруженное кол-во" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Отгрузка заказа на продажу" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "Адрес отгрузки должен соответствовать клиенту" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "Адрес доставки для этой отгрузки" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Дата отправления" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Дата доставки" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Дата доставки отгрузки" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Проверн" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Пользователь, проверивший эту отгрузку" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Отправление" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Номер отправления" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Номер отслеживания" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Информация об отслеживании доставки" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Номер счета" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Номер ссылки на связанную накладную" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Отгрузка уже отправлена" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Отправка не имеет зарезервированных складских позиций" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "Отгрузка должна быть проверена, прежде чем её можно завершить" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Дополнительная позиция заказа на продажу" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Распределение заказа на продажу" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Складская позиция не была назначена" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "Невозможно зарезервировать складскую позицию в позицию другой детали" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Невозможно распределить запас к позиции без детали" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Количество распределения не может превышать количество на складе" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Резервируемое количество должно быть больше нуля" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Количество должно быть 1 для сериализированных складских позиций" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Заказ на продажу не соответствует отгрузке" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Отгрузка не соответствует заказу на продажу" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Строка" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Ссылка на отгрузку заказа на продажу" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Элемент" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Выберите складскую позицию для резервирования" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Укажите резервируемое количество" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Ссылка на заказ на возврат" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Компания, из которой возвращаются товары" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Статус заказа на возврат" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Позиция заказа на возврат" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "Необходимо указать складской элемент" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "Количество возврата превышает количество на складе" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "Количество возврата должно быть больше нуля" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Недопустимое количество для серийного складского элемента" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Выберите позицию, возвращаемую от клиента" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Дата получения" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "Дата возврата" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Результат" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Результат для этой позиции" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "Стоимость, связанная с возвратом или ремонтом этой позиции" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Дополнительная позиция заказа на возврат" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "ID заказа" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID заказа для дублирования" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Копировать позиции" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Копировать позиции из исходного заказа" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Копировать дополнительные позиции" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Копировать дополнительные позиции из исходного заказа" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Скопировать параметры" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Завершённые позиции" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Дублировать заказ" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Указать параметры для дублирования этого заказа" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Недействительный ID заказа" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Имя поставщика" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Заказ не может быть отменён" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Разрешить закрывать заказ с незавершёнными позициями" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "В заказе есть незавершённые позиции" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Заказ не открыт" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Автоматическая цена" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "Автоматически рассчитывать закупочную цену на основе данных детали поставщика" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Валюта заказа на закупку" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Объединять элементы" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "Объединять в одну позицию элементы, у которых одинаковая деталь, место хранения и целевая дата" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Артикул" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Внутренний артикул детали" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Внутреннее название детали" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Необходимо указать поставляемую деталь" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Необходимо указать заказ на закупку" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Поставщик должен соответствовать заказу на закупку" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Заказ на закупку должен соответствовать поставщику" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Позиция" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Выберите место назначения для полученных элементов" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Введите код партии для поступающих складских позиций" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Истекает" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "Введите дату истечения срока годности для поступающих складских единиц" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Введите серийные номера для входящих складских позиций" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Переопределить информацию об упаковке для поступающих складских единиц" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Дополнительная заметка для поступающих складских единиц" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Штрих-код" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Сканированный штрих-код" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Штрихкод уже используется" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Необходимо предоставить позиции" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Необходимо указать место назначения" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Предоставленные значения штрихкодов должны быть уникальными" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Отгрузки" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Выполненные отгрузки" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "Зарезервированные позиции" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Валюта цены продажи" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Выделенные элементы" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Информация об отгрузке не предоставлена" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Позиция не связана с этим заказом" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Количество должно быть положительным" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Введите серийные номера для резервирования" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Отгрузка уже отправлена" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Отгрузка не связана с этим заказом" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Совпадений для следующих серийных номеров не найдено" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Следующие серийные номера недоступны" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Позиция заказа на возврат" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Позиция не соответствует заказу на возврат" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Позиция уже получена" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "Предметы могут быть получены только по заказам, которые находятся в процессе выполнения" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Количество для возврата" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Валюта цены позиции" @@ -5756,59 +5829,63 @@ msgstr "Является ревизией" msgid "Has Revisions" msgstr "Есть ревизии" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "Спецификация валидна" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "Каскадные категории" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "Если включено, включать элементы в дочерних категориях указанной категории" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Фильтровать по числовому идентификатору категории или литералу 'null'" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "Сборочная деталь активна" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "Отслеживаемая сборочная деталь" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "Сборная деталь тестируется" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "Деталь компонента активна" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "Отслеживаемая деталь компонента" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Компонент тестируется" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "Сборочная деталь компонента" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "Виртуальная деталь компонента" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "На складе" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Использования" @@ -5821,7 +5898,7 @@ msgstr "Категория детали" msgid "Part Categories" msgstr "Категория детали" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Место хранения по умолчанию" @@ -5849,7 +5926,7 @@ msgstr "Ключевые слова по умолчанию для детале msgid "Icon" msgstr "Значок" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Значок (необязательно)" @@ -5870,984 +5947,1012 @@ msgstr "Значение по умолчанию" msgid "Default Parameter Value" msgstr "Значение параметра по умолчанию" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Детали" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Нельзя удалить параметры заблокированной детали" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Нельзя изменить параметры заблокированной детали" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Нельзя удалить эту деталь, так как она заблокирована" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Нельзя удалить эту деталь, так как она ещё активна" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Нельзя удалить эту деталь, так как она используется в сборке" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Деталь '{self}' не может быть использована в спецификации для '{parent}' (рекурсивно)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Деталь '{parent}' используется в спецификации для '{self}' (рекурсивно)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN должен соответствовать регулярному выражению {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "Деталь не может быть ревизией самой себя" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Ревизии разрешены только для сборочных деталей" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Нельзя сделать ревизию шаблонной детали" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "Родительская деталь должна указывать на тот же шаблон" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Складская позиция с этим серийным номером уже существует" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Дублирующий IPN не разрешён в настройках детали" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "Дублирующая ревизия детали уже существует." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Деталь с таким именем, внутренним артикулом и ревизией уже существует." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Детали не могут быть назначены структурным категориям!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Наименование детали" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Шаблон" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Эта деталь является шаблоном?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Эта деталь является разновидностью другой детали?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Разновидность" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Описание детали (необязательно)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Ключевые слова" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "Ключевые слова для улучшения видимости в результатах поиска" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Категория" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Внутренний артикул" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Ревизия или серийный номер детали" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Ревизия" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Является ли эта деталь ревизией другой детали?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Ревизия от" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Где обычно хранится эта деталь?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Срок действия по умолчанию" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "Срок годности (в днях) для складских позиций этой детали" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Минимальный запас" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Минимально допустимый складской запас" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Единицы измерения этой детали" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Может ли эта деталь быть создана из других деталей?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "Может ли эта деталь использоваться для создания других деталей?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Является ли каждый экземпляр этой детали уникальным, обладающим серийным номером?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "Можно ли в этой детали записывать результаты тестов?" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "Может ли эта деталь быть закуплена у внешних поставщиков?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Может ли эта деталь быть продана покупателям?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Эта деталь активна?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Заблокированные детали нельзя редактировать" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "Эта деталь виртуальная, как программный продукт или лицензия?" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "Спецификация подтверждена" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "Валидна ли спецификация для этой детали?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Контрольная сумма BOM" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Сохранённая контрольная сумма спецификации" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "BOM проверил" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Дата проверки BOM" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Создатель" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Ответственный владелец этой детали" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Продать несколько" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Валюта, используемая для кэширования расчётов цен" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Минимальная Стоимость BOM" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Минимальная стоимость компонентных деталей" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Максимальная Стоимость BOM" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Максимальная стоимость компонентных деталей" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Минимальная стоимость закупки" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Минимальная историческая стоимость закупки" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Максимальная стоимость закупки" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Максимальная историческая стоимость закупки" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Минимальная внутренняя цена" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Минимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Максимальная внутренняя цена" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Максимальная стоимость на основе внутренних ценовых уровней" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Минимальная цена поставщика" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Минимальная цена детали от внешних поставщиков" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Максимальная цена поставщика" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Максимальная цена детали от внешних поставщиков" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Минимальная стоимость варианта" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Расчётная минимальная стоимость вариантов деталей" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Максимальная стоимость варианта" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Расчётная максимальная стоимость вариантов деталей" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Минимальная Стоимость" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Переопределить минимальную стоимость" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Максимальная Стоимость" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Переопределить максимальную стоимость" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Расчётная общая минимальная стоимость" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Расчётная общая максимальная стоимость" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Минимальная цена продажи" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Минимальная цена продажи на основе ценовых уровней" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Максимальная цена продажи" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Максимальная цена продажи на основе ценовых уровней" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Минимальная стоимость продажи" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Минимальная историческая цена продажи" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Максимальная стоимость продажи" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Максимальная историческая цена продажи" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Деталь для инвентаризации" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Количество элементов" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Количество отдельных складских позиций на момент инвентаризации" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Общий доступный запас на момент инвентаризации" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Дата" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Дата проведения инвентаризации" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Минимальная стоимость запасов" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Оценочная минимальная стоимость имеющихся запасов" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Максимальная стоимость запасов" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Оценочная максимальная стоимость имеющихся запасов" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Цена продажи детали по порогу" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Шаблон теста детали" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "Недопустимое имя шаблона — должно содержать хотя бы один буквенно-цифровой символ" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "Шаблоны тестов можно создавать только для тестируемых деталей" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "Шаблон теста с тем же ключом уже существует для детали" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Название теста" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Введите имя для теста" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Ключ теста" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Упрощённый ключ для теста" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Описание теста" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Введите описание для этого теста" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Активен ли данный тест?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Необходим" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Необходимо ли пройти этот тест?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Требуется значение" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "Требуется ли значение для этого теста при добавлении результата?" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Требуются вложения" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "Требуется ли прикреплять вложение в виде файла при добавлении результатов теста?" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Допустимые варианты данного теста(через запятую)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "Пункт спецификации нельзя изменить — сборка заблокирована" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "Пункт спецификации нельзя изменить — вариант сборки заблокирован" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Выберите родительскую деталь" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Суб-деталь" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Выбрать деталь для использования в BOM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Количество элементов в спецификации" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Эта позиция спецификации необязательна" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "Эта позиция - расходник (она не отслеживается в заказах на производство)" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "Количество для подготовки" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "Дополнительное требуемое количество для сборки, учитывающее потери при подготовке" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "Потери" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "Оценочные потери для сборки, выраженные в процентах (0–100)" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "Округление до кратности" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "Округлять требуемое производственное количество до ближайшего кратного этого значения" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Ссылка на позицию спецификации" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Заметка о позиции в спецификации" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Контрольная сумма" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Контрольная сумма строки спецификации" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Проверен" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Этот пункт спецификации подтверждён" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Наследуется" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "Позиция спецификации наследуется разновидностями детали" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "Эту позицию можно заменять деталями, которые находятся на складе" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "Для отслеживаемых деталей количество должно быть целым числом" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Необходимо указать поддеталь" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Замена пункта спецификации" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "Деталь для замены не может быть такой же, как основная деталь" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Позиция BOM-родителя" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Замена детали" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Деталь 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Деталь 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Выберите связанную деталь" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Заметка для данной связи" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "Нельзя создать отношение детали с самой собой" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Дублирующее отношение уже существует" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Родительская категория" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Родительская категория деталей" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Подкатегории" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Результаты" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Количество результатов, зарегистрированных по этому шаблону" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Валюта закупки складской позиции" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "Файл не является изображением" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Оригинальная деталь" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Выберите исходную деталь для копирования" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Копировать Изображение" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Копировать изображение из исходной детали" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Скопировать BOM" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Копировать спецификацию из исходной детали" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Копировать данные параметров из исходной детали" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Копировать Записи" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Скопировать записи из оригинальной детали" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Копировать тесты" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "Копировать шаблоны тестов из исходной детали" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Начальное количество на складе" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "Задайте начальное количество этой детали на складе. Если количество равно 0, складская позиция не будет добавлена." -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Начальное местоположение запаса" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Укажите начальное местоположение запаса для этой детали" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Выберите поставщика (или оставьте поле пустым, чтобы пропустить)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Артикул производителя" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Выбранная компания не является допустимым поставщиком" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Выбранная компания не является допустимым производителем" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Деталь производителя с данным артикулом уже существует" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Деталь поставщика с данным артикулом уже существует" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Название категории" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Производится" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "Количество этой детали, находящееся в производстве" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Оставшееся количество этой детали, запланированное к сборке" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Складские позиции" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Ревизии" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Общий запас" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Нераспределённый запас" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Запас вариантов" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Дублировать деталь" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Копировать начальные данные из другой детали" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Начальный запас" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Создавать деталь с начальным количеством на складе" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Информация о поставщике" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Добавить начальную информацию о поставщике для этой детали" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Копировать параметры категории" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Копировать шаблоны параметров из выбранной категории деталей" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Существующее изображение" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Имя файла существующего изображения детали" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Файл изображения не существует" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Проверить всю спецификацию" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Можно произвести" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "Требуется для заказов на сборку" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "Выделено для заказов на сборку" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "Требуется для заказов на продажу" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "Выделено для заказов на продажу" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "Внутренний артикул детали" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "Описание детали" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Выберите деталь (и любые её варианты) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "Выберите категорию (и любые её подкатегории) для которой сгенерировать информацию об инвентаризации" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "Выберите склад, чтобы включить все детали в наличии в указанном складе (включая подразделы)" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "Создать записи инвентаризации" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "Сохранить записи инвентаризации для выбранных деталей" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "Создать отчет" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "Создать отчёт инвентаризации для выбранных деталей" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Минимальная цена" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Переопределить рассчитанное значение минимальной цены" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Валюта минимальной цены" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Максимальная цена" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Переопределить рассчитанное значение максимальной цены" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Валюта максимальной цены" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Обновить" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Обновить цены для этой детали" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "Не удалось конвертировать из предоставленных валют в {default_currency}" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "Минимальная цена не должна превышать максимальную цену" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "Максимальная цена не должна быть меньше минимальной" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Выберите родительскую сборку" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Выберите деталь, которая является компонентом" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Выберите деталь, из которой копировать спецификацию" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Удалить существующие данные" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Удалить существующие пункты спецификации перед копированием" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Включая наследуемые" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "Включать пункты спецификации, унаследованные от шаблонных деталей" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Пропустить некорректные строки" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Включите эту опцию, чтобы пропускать недопустимые строки" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Копировать детали-заменители" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Копировать детали-заменители при дублировании пунктов спецификации" @@ -7099,15 +7204,15 @@ msgstr "Количество для распределения" msgid "Label printing failed" msgstr "Печать этикетки не удалась" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Ошибка при выводе этикетки в PDF" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Ошибка при выводе этикетки в HTML" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Нет элементов для печати" @@ -7168,7 +7273,7 @@ msgstr "Предоставляет встроенную поддержку шт #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "Уведомление об изменённой детали" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "Для детали `{part.name}` произошло событие `{part_action}`" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "PDF-печать этикеток InvenTree" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Предоставляет встроенную поддержку печати этикеток PDF" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Режим отладки" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Включить режим отладки — возвращает чистый HTML вместо PDF" @@ -7568,7 +7673,7 @@ msgstr "Граница" msgid "Print a border around each label" msgstr "Печатать рамку вокруг каждой этикетки" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Альбомная" @@ -8029,7 +8134,7 @@ msgstr "Плагин не поддерживает печать этикеток msgid "Invalid label dimensions" msgstr "Недопустимые размеры этикетки" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Ни одного допустимого элемента не предоставлено для шаблона" @@ -8073,112 +8178,112 @@ msgstr "Прикреплять к модели при печати" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Сохранять отчёт как вложение к связанному экземпляру модели при печати" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Шаблон имени файла" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Шаблон для создания имён файлов" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Шаблон включён" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "Тип модели шаблона" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Фильтры" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Фильтры запроса шаблона (список ключ=значение через запятую)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Файл шаблона" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Размер страницы для PDF-отчётов" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Рендерить отчёт в альбомной ориентации" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "Объединить" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "Рендерить один отчёт по выбранным элементам" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "Отчёт, сгенерированный из шаблона {self.name}" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "Синтаксическая ошибка в шаблоне" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "Ошибка при рендеринге отчёта" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "Ошибка при генерации отчёта" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "Ошибка при объединении выводов отчётов" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Ширина [мм]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Ширина этикетки, задаётся в миллиметрах" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Высота [мм]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Высота этикетки, задаётся в миллиметрах" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "Ошибка при печати этикеток" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Сниппет" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Файл фрагмента отчёта" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Описание файла сниппета" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Объект" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Файл ресурса отчёта" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Описание медиафайла" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Серийный номер" @@ -8538,7 +8643,7 @@ msgstr "Типы местоположения склада" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Значок по умолчанию для мест хранения с невыбранным значком (необязательно)" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Место хранения" @@ -8546,11 +8651,11 @@ msgstr "Место хранения" msgid "Stock Locations" msgstr "Места хранения" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Владелец" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Выберите владельца" @@ -8558,7 +8663,7 @@ msgstr "Выберите владельца" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Складские позиции не могут находиться в структурных местах хранения, но могут находиться в дочерних местах хранения." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Внешний" @@ -8578,274 +8683,282 @@ msgstr "Тип места хранения данного склада" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "Вы не можете сделать это место хранение структурным, потому, что некоторые складские позиции уже находятся в нем!" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "{field} не существует" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Необходимо указать деталь" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "Складские позиции не могут находиться в структурных местах хранения!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Складская позиция не может быть создана для виртуальных деталей" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "Тип детали ('{self.supplier_part.part}') должен быть {self.part}" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "Количество должно быть 1 для элемента с серийным номером" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Серийный номер нельзя задать, если количество больше 1" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Элемент не может принадлежать сам себе" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "Элемент должен иметь ссылку на производство, если is_building=True" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Ссылка на производство не указывает на тот же элемент" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Складская позиция" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Базовая деталь" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "Выберите соответствующего поставщика детали для этой складской позиции" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Где находится эта складская позиция?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Упаковка этой складской позиции хранится в" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Установлено в" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Установлен ли этот элемент в другой элемент?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Серийный номер для этого элемента" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Код партии для этой складской позиции" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Количество на складе" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Исходное производство" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Производства для этой складской позиции" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Поглощен" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Заказ на производство, который поглотил эту складскую позицию" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Исходный заказ на закупку" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Заказ на закупку для этой складской позиции" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Целевой заказ на продажу" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Дата истечения срока годности для складской позиции. Остатки будут считаться просроченными после этой даты" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Удалить при обнулении" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Удалить эту складскую позицию при обнулении складского запаса" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Цена за единицу на момент покупки" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Преобразовано в деталь" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "Количество превышает доступный запас" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Деталь не является отслеживаемой" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Количество должно быть целым числом" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Количество не должно превышать доступный запас ({self.quantity})" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Серийные номера должны быть предоставлены в виде списка" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Количество не соответствует серийным номерам" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "Нельзя назначить запас в структурное местоположение" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Шаблон теста не существует" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Складская позиция была назначена заказу на продажу" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Складская позиция установлена в другую деталь" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Складская позиция содержит другие детали" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Складская позиция была назначена покупателю" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Складская позиция в производстве" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Серийные запасы нельзя объединить" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Дублирующие складские элементы" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "Складские позиции должны ссылаться на одну и ту же деталь поставщика" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Коды статуса запаса должны совпадать" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "Складской элемент нельзя переместить, так как он отсутствует на складе" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "Отслеживание складского элемента" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Заметки к записи" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "Результат теста складского элемента" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Для этого теста должно быть указано значение" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Для этого теста требуется загрузить вложения" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "Недопустимое значение для этого теста" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Результат тестирования" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Результат выполнения теста" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Вложение с результатом теста" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Заметки о тестировании" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Испытательное оборудование" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "Идентификатор испытательного оборудования, на котором выполнялось тестирование" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Запущен" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "Время начала тестирования" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Завершён" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "Время окончания тестирования" @@ -8929,7 +9042,7 @@ msgstr "Введите серийные номера для новых элем msgid "Supplier Part Number" msgstr "Номер детали поставщика" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Просрочен" @@ -9466,131 +9579,131 @@ msgstr "Последнее время использования токена" msgid "Revoked" msgstr "Отозван" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Права доступа" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Вид" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Разрешение на просмотр элементов" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Добавить" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Разрешение на добавление элементов" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Изменить" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Разрешение на редактирование элементов" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Удалить" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Разрешение на удаление элементов" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "Бот" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "Внутренний" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Гость" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Язык" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "Предпочтительный язык пользователя" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Тема" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Настройки веб-интерфейса в формате JSON — не редактировать вручную!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "Виджеты" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "Настройки виджетов панели в формате JSON — не редактировать вручную!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Отображаемое имя" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Отображаемое имя пользователя" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Положение" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "Основное место работы или должность" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Статусное сообщение пользователя" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "Информация о местоположении пользователя" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "Пользователь активно использует систему" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "Предпочтительная контактная информация пользователя" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Тип пользователя" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "Какого типа этот пользователь?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Организация" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "Основная организация/принадлежность пользователя" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Основная группа" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "Основная группа для пользователя" diff --git a/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sk/LC_MESSAGES/django.po index 405e3ff31d..83b0cd3b3c 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Slovak\n" "Language: sk_SK\n" @@ -89,6 +89,7 @@ msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "" @@ -104,11 +105,11 @@ msgstr "" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 -msgid "Model type" -msgstr "" - -#: common/models.py:1997 -msgid "Target model type for image" -msgstr "" - -#: common/models.py:2005 -msgid "Select file to attach" -msgstr "" - -#: common/models.py:2021 -msgid "Comment" +#: common/models.py:2019 +msgid "No file attached to rename" msgstr "" #: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 +msgid "Model type" +msgstr "" + +#: common/models.py:2072 +msgid "Target model type for image" +msgstr "" + +#: common/models.py:2080 +msgid "Select file to attach" +msgstr "" + +#: common/models.py:2096 +msgid "Comment" +msgstr "" + +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sl/LC_MESSAGES/django.po index c32d5b5e6e..e1349bc2fa 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Slovenian\n" "Language: sl_SI\n" @@ -89,6 +89,7 @@ msgstr "Ni mogoče pretvoriti {original} v {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Podana napačna količina" @@ -104,11 +105,11 @@ msgstr "Vnesi datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Napaka povezave" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Odziv serverja: napravilni status kode" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Pojavila se je izjema" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Odziv serverja: napačna dolžina vrednosti" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Prevelika velikost slike" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Prenos slike presegel največjo velikost" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Oddaljeni server vrnil prazen odziv" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Podani URL ni veljavna slikovna datoteka" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "E-pošta" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "Referenca se mora ujemati s vzorcem" msgid "Reference number is too large" msgstr "Referenčna številka prevelika" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Nedovoljena izbira" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Opis (opcijsko)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Pot" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Podvojena imena ne morejo obstajati pod istim nadrejenim elementom" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown opombe (neobvezno)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Podatki čtrne kode" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Podatki črtne kode tretje osebe" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Oznaka črtne kode" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Enolična oznaka podatkov črtne kode" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Črtna koda že obstaja" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Napaka strežnika" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Zaznana napaka na strežniku." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Mora biti veljavna številka" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Izberite valuto med razpoložljivimi možnostmi" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Neveljavna vrednost" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Oddaljena slika" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "Povezava do oddaljene slike" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Prenos slik iz oddaljene povezave ni omogočen" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "Neveljavna fizična enota" msgid "Not a valid currency code" msgstr "Neveljavna oznaka valute" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "Nadrejena izgradnja" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Dodeljeno meni" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Izgradnja mora biti najprej preklicana, nato je lahko izbrisana" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Neobvezno" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Montaža" @@ -687,32 +672,32 @@ msgstr "Montaža" msgid "Tracked" msgstr "Sledi" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testno" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Dodeljeno" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Nalog izgradnje" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Referenca naloga izgradnje" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Status izgradnje" msgid "Build status code" msgstr "Koda statusa izgradnje" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Številka serije" @@ -870,8 +855,8 @@ msgstr "Številka serije" msgid "Batch code for this build output" msgstr "Številka serije za to izgradnjo" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Datum ustvarjenja" @@ -891,7 +876,7 @@ msgstr "Rok dokončanja" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Datom končanja" @@ -907,8 +892,8 @@ msgstr "Izdal" msgid "User who issued this build order" msgstr "Uporabnik, ki je izdal nalog za izgradnjo" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odgovoren" @@ -917,12 +902,12 @@ msgstr "Odgovoren" msgid "User or group responsible for this build order" msgstr "Odgovorni uporabnik ali skupina za to naročilo" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Zunanja povezava" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Zunanja povezava" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "Nalog izgradnej dokončan" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Ni določena izgradnja" @@ -980,47 +965,47 @@ msgstr "Igradnja je že dokončana" msgid "Build output does not match Build Order" msgstr "Izgradnja se ne ujema s nalogom izdelave" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "Količina" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Količina za zalogo s serijsko številko mora biti 1" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Preveč zaloge je prestavljene" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Postavka zaloge" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Izvorna postavka zaloge" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Količina zaloge za prestavljanje za izgradnjo" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Inštaliraj v" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Destinacija postavke zaloge" @@ -1099,7 +1084,7 @@ msgstr "Destinacija postavke zaloge" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Uporabnik" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivno" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Povezava" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Priloga" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Manjka datoteka" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Manjka zunanja povezava" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Izberite prilogo" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Komentar" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "Ime datoteke" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Poslano" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Prestavljena količina mora biti večja od 0" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sr/LC_MESSAGES/django.po index 82ce13a63f..71f9ccd0cc 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Serbian (Latin)\n" "Language: sr_CS\n" @@ -89,6 +89,7 @@ msgstr "Nije moguće konvertovati {original} u {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Isporučena nevažeća količina" @@ -104,11 +105,11 @@ msgstr "Unesite datum" msgid "Invalid decimal value" msgstr "Neispravna decimalna vrednost" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Greška u povezivanju" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Server je odgovorio nevažećim statusnim kodom" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Došlo je do izuzetka" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 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:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Veličina slike je prevelika" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Preuzimanje slike premašilo je maksimalnu veličinu" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Udaljeni server vratio je prazan odgovor" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Navedeni URL nije važeća slikovna datoteka" @@ -219,7 +220,7 @@ msgstr "Prijavljivanje na aplikaciju" msgid "Email" msgstr "E-Pošta" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "Referenca mora odgovarati traženom obrascu" msgid "Reference number is too large" msgstr "Broj reference je predugačak" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Nevažeći izvor" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Ime" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Opis" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Opis (Opciono)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Putanja" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Dvostruka imena ne mogu postojati pod istom nadredjenom grupom" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Zabeleške (Opciono)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Podaci sa barkoda" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Podaci sa barkoda trećih lica" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Heš barkoda" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Jedinstveni hash barkoda" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Postojeći barkod pronađen" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Greška servera" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Server je zabležio grešku." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Mora biti važeći broj" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Odaberite valutu među dostupnim opcijama" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Nevažeća vrednost" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Udaljena slika" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL udaljene slike" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Preuzimanje slika s udaljenog URL-a nije omogućeno" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Neuspešno preuzimanje slike sa udaljene URL" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "Nevažeća jedinica mere" msgid "Not a valid currency code" msgstr "Nevažeći kod valute" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Status naloga" @@ -561,21 +546,21 @@ msgstr "Status naloga" msgid "Parent Build" msgstr "Roditeljski proizvod" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Uključi varijante" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Uključi varijante" msgid "Part" msgstr "Deo" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategorija" @@ -605,7 +590,7 @@ msgstr "Kategorija" msgid "Ancestor Build" msgstr "Proizvod predaka" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Dodeljeno meni" @@ -653,11 +638,11 @@ msgstr "Završeno pre" msgid "Completed after" msgstr "Završeno nakon" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "Ne uključuj stablo" 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:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Potrošni materijal" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Opciono" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Sklapanje" @@ -687,32 +672,32 @@ msgstr "Sklapanje" msgid "Tracked" msgstr "Praćeno" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Proverljivo" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Neizmirena narudžbina" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Alocirano" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Po narudžbini" @@ -720,7 +705,7 @@ msgstr "Po narudžbini" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Nalog za izradu" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Lokacija" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Reference naloga za pravljenje" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Status izgradnje" msgid "Build status code" msgstr "Kod statusa izgradnje" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Kod serije" @@ -870,8 +855,8 @@ msgstr "Kod serije" msgid "Batch code for this build output" msgstr "Kod izgradnje za ovaj izlaz" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "datum kreiranja" @@ -891,7 +876,7 @@ msgstr "Datum ciljanog završetka" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Datum završetka" @@ -907,8 +892,8 @@ msgstr "izdato od" msgid "User who issued this build order" msgstr "Korisnik koji je izdao nalog za izgradnju" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Odgovoran" @@ -917,12 +902,12 @@ msgstr "Odgovoran" msgid "User or group responsible for this build order" msgstr "Korisnik ili grupa koja je odgovorna za ovaj nalog za izgradnju" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Spoljašnja konekcija" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Link za eksterni URL" @@ -934,8 +919,8 @@ msgstr "Prioritet izgradnje" msgid "Priority of this build order" msgstr "Prioritet ovog naloga za izgradnju" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Kod projekta" @@ -968,7 +953,7 @@ msgstr "Nalog za izgradnju je kompletiran" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Nije određen izlaz izgradnje" @@ -980,47 +965,47 @@ msgstr "Izlaz izgradnje je već kompletiran" msgid "Build output does not match Build Order" msgstr "Izlaz izgradnje se ne slaže sa Nalogom za izgradnju" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Količina mora biti veća od nule" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 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:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "Izlaz izgradnje {serial} nije zadovoljio zahtevane testove" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Stavka porudžbine naloga za izgradnju" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Objekat izgradnje" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Objekat izgradnje" msgid "Quantity" msgstr "Količina" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Potrebna količina za nalog za izgradnju" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 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:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Količina mora da bude 1 za zalihe koje su serijalizovane" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Stavka zaliha je prealocirana" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stavka zaliha" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Izvor stavke zaliha" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Količina zaliha za alociranje za izgradnju" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Ugradi u" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Stavka zaliha odredišta" @@ -1099,7 +1084,7 @@ msgstr "Stavka zaliha odredišta" msgid "Build Level" msgstr "Nivo izgradnje" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Ime dela" @@ -1135,7 +1120,7 @@ msgstr "Brojčana količina potrebna za delove koji mogu da se prate" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serijski brojevi" @@ -1156,8 +1141,8 @@ msgstr "Automatski alociraj serijske brojeve" msgid "Automatically allocate required items with matching serial numbers" msgstr "Automatski alociraj tražene stavke sa odgovarajućim serijskim brojevima" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Sledeći serijski brojevi već postoje ili su neispravni" @@ -1245,7 +1230,7 @@ msgstr "Prihvati da stavke zaliha nisu u potpunosti alocirane za ovaj nalog za i msgid "Required stock has not been fully allocated" msgstr "Tražene zalihe nisu u potpunosti alocirane" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Prihvati nekompletirano" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part mora da se referencira istom delu kao u nalogu za izgradnj msgid "Item must be in stock" msgstr "Stavka mora da bude u zalihama" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Dostupna količina ({q}) premašena" @@ -1306,7 +1291,7 @@ msgstr "Izlaz izgradnje mora da određen za alokaciju praćenih delova" 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Stavke alociranja se moraju odrediti" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Deo dobavljača" @@ -1404,7 +1389,7 @@ msgstr "Referenca izgradnje" msgid "Part Category Name" msgstr "Ime kategorije dela" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Može da se prati" @@ -1412,29 +1397,29 @@ msgstr "Može da se prati" msgid "Inherited" msgstr "Nasleđen" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Dozvoli varijante" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "BOM stavka" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "U proizvodnji" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Spoljašnje zalihe" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Dostupne zalihe" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "Korisnik nema potrebne dozvole da bi izbrisao ove atačmente" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Korisnik nema dozvolu da izbriše ovaj atačment" @@ -1554,610 +1543,634 @@ msgstr "Nema dodataka" msgid "Project Code Label" msgstr "Naziv koda projekta" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Ažurirano" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Vreme poslednjeg ažuriranja" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Jedinstveni kod projekta" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Opis projekta" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Korisnik ili grupa odgovorni za ovaj projkat" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Ključ za podešavanje" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Vrednost podešavanja" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Izabrana vrednost nije ispravna opcija" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Vrednost mora da bude boolean tipa" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Vrednost mora da bude integer tipa" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Vrednost mora biti broj" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Vrednost ne prolazi test ispravnosti" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Tekstualni ključ mora da bude jedinstven" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Korisnik" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Prelomna količina cene" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Cena" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Cena jedinice za određenu količinu" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Krajnja tačka" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Krajnja tačka na kojoj je primljen zahtev za izmenu web stranice" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Ime ovog zahteva za izmenu stranice" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktivan" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Da li je ovaj zahtev za izmenu aktivan?" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Token za pristup" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Tajna" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Deljena tajna za HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "ID poruke" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Jedinstveni identifikator za ovu poruku" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Računar" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Računar koji je primio ovu poruku" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Zaglavlje" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Zaglavlje ove poruke" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Telo" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Telo ove poruke" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Krajnja tačka na kojoj je ova poruka primljena" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Radilo se na " -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Da li je rad sa ovom porukom završen?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Naslov" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Link" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Objavljeno" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Autor" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Rezime" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Čitaj" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Da li je ova stavka vesti pročitana" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Datoteka slike" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Ciljni tip modela za ovu sliku" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "Ciljni ID modela za ovu sliku" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Posebna jedinica" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Simbol jedinice mora biti jedinstven" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Ime jedinice mora da bude ispravan identifikator" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Ime jedinice" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Simbol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Opcioni simbol jedinice" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definicija" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Definicija jedinice" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Prilog" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Nedostaje datoteka" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Nedostaje eksterni link" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Izaberite datoteku za prilog" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Komentar" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Komentar priloga" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Datum učitavanja" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Datum kada je datoteka učitana" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Veličina datoteke" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Veličina datoteke u bajtovima" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Određen je neispravan tip modela za prilog" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Posebno stanje" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Posebna stanja" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Referentni status podešen" -#: common/models.py:2109 +#: common/models.py:2184 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:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logički ključ" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Vrednost" -#: common/models.py:2121 +#: common/models.py:2196 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:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Ime stanja" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etiketa" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Etiketa koja će biti prikazana na korisničkoj strani" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Boja" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Boja koja će biti prikazana na korisničkoj strani" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Model" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Model ovog stanja je povezan sa " -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Model mora biti izabran" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Ključ mora biti izabran" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Logički ključ mora biti izabran" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "Ključ mora da se razlikuje od logičkog ključa" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Validna referenca statusa klase mora biti dostavljena" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 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:2206 +#: common/models.py:2281 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:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Lista odabira" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Liste odabira" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Ime liste odabira" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Opis liste odabira" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Zaključano" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Da li je ova lista odabira zaključana?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Da li se ova lista odabira može koristiti?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Ekstenzija/dodatak za izvor" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Ekstenzija koja pruža listu odabira" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "String izvora" -#: common/models.py:2287 +#: common/models.py:2362 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:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Podrazumevani unos" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Podrazumevani unos za ovu listu odabira" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Kreirano" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "Datum i vreme kada je ova lista odabira kreirana" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Poslednje ažuriranje" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Unos liste odabira" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Unosi liste odabira" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Lista odabira kojoj ovaj unos pripada" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Vrednost ovog unosa liste odabira" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Naziv ovog unosa liste odabira" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Opis ovog unosa liste odabira" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Da li je unos ove liste odabira aktivan?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Šablon parametra" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Checkbox parametri ne mogu imati jedinice" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Checkbox parametri ne mogu imati izbore" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Izbori moraju biti jedinstveni" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Ime šablona parametra mora biti jedinstveno" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Naziv parametra" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Jedinice" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Fizičke jedinice za ovaj parametar" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Opis parametra" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Polje za potvrdu" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Da li je ovaj parametar checkbox?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Izbori" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "Validni izbori za ovaj parametar (razdvojeni zapetom)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Lista izbora za ovaj parametar" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Omogućen" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Nije validan izbor za vrednost parametra" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Šablon" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Podaci" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Vrednost parametra" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Vrednost parametra" msgid "Note" msgstr "Beleška" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Opciona beleška" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Skeniranje bar koda" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Podaci bar koda" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Korisnik koji je skenirao bar kod" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Vremenski trag" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Datum i vreme skeniranja bar koda" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "URL krajnja tačka kojaj je obradila bar kod" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Kontekst" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Kontekst podataka za skeniranje bar koda" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Odgovor" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Podaci odgovora za skeniranje bar koda" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Rezultat" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "Da li je skeniranje bar koda bilo uspešno?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Ključ" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Stavke primljene" @@ -2457,7 +2470,7 @@ msgstr "Ime datoteke" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Tip modela" @@ -2601,13 +2614,13 @@ msgstr "Interval ažuriranja valuta" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dani" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Dodatak za ažuriranje valute koji će se koristiti" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Skini sa URL" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "Dozvoli skidanje sa udaljenih lokacija slika i datoteka" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "Ograničenje veličine skidanja" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Maksimalna dozvoljena veličina slike koja se skida" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "Korisnik-agent koji se koristi za skidanje sa URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Stroga validacija URL" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "Traži specifikaciju za validaciju URL-ova" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Ažuriraj interval provere" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Automatsko pravljenje rezervne kopije" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Automatski interval pravljenja rezervnih kopija" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "Odredi broj dana između automatskih pravljenja rezervnih kopija" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Interval brisanja zadataka" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Interval brisanja evidencije grešaka" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Interval brisanja obaveštenja" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Podrška za bar kod" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Uskladišti rezultate bar koda" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "Uskladišti rezultate bar koda u bazu podataka" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Maksimalan broj skeniranja bar koda" -#: common/setting/system.py:389 +#: common/setting/system.py:369 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:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Kašnjenje unosa bar koda" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Vreme kašnjena obrađivanja ulaza bar koda" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Podrška za bar kod veb kameru" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Prikaži podatke bar koda" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Prikaži podatke bar koda u pretraživaču kao tekst" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Dodatak za generisanje bar koda" -#: common/setting/system.py:414 +#: common/setting/system.py:394 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:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Revizije dela" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Omogući polje za reviziju dela" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Jedino revizija sastavljanja " -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Dozvoli jedino revizije za sastavne delove" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Dozvoli brisanje iz sastavljanja" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Interni broj dela regex" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "Regularni obrazac izraza za podudaranje IPN dela" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Dozvoli duple IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "Dozvoli da više delova dele isti IPN" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Dozvoli izmenu IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "Dozvoli izmenu IPN vrednosti u toku izmene dela" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Kopiraj BOM podatke dela" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "Podrazumevaj kopiranje BOM podataka prilikom pravljenja duplikata dela " -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Kopiraj podatke parametara dela" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "Podrazumevaj kopiranje podataka parametara dela prilikom pravljenja duplikata dela" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Kopiraj podatke testiranja dela" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "Podrazumevaj kopiranje podataka testiranja dela prilikom pravljenja duplikata dela" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Kopiraj šablone parametara kategorije" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "Kopiraj šablone parametara kategorije prilikom pravljenja dela" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Podrazumevano je da su delovi šabloni" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponenta" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Može da se kupi" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Podrazumevano je da se delovi mogu kupiti" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Može da se proda" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "podrazumevano je da delovi mogu da se prodaju" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Podrazumevano je da delovi mogu da se prate" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuelni" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Podrazumevano je da su delovi virtuelni" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Prikaži povezane delove" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Prikaži povezane delove za deo" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Inicijalni podaci zaliha" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "Dozvoli kreiranje inicijalne alihe prilikom dodavanja novog dela" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Podaci inicijalnog dobavljača" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Format prikazivanja imena dela" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Format u kome će se prikazivati ime dela" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Podrazumevana ikona za kategoriju dela" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "Podrazumevana ikona za kategoriju dela (prazno znači bez ikone)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Minimalan broj decimalnih mesta za cene" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Maksimalan broj decimalnih mesta za cene" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Koristi cene dobavljača" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Premosti istorijat kupovina" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "Prethodne cene narudžbenice zamenjuje pauze cena dobavljača" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Koristi cene stavki u zalihama" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Godina cena stavki u zalihama" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Koristi drugačije cene" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Uključi drugačije cene u sveukupnim kalkulacijama cene" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Samo aktivne varijante" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "Koristi samo aktivne varijante za određivanje varijante cene" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Vremenski period za ponovno određivanje cena" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Interne cene" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Omogući interne cene za delove" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Premošćavanje internih cena" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "Ako su dostupne, interne cene premošćuju kalkulacije opsega cena" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Omogući štampanje etiketa" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Omogući štampanje etiketa preko web interfejsa" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "DPI slike etikete" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Omogući izveštaje" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Omogući generisanje izveštaja" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Mod otklanjanja grešaka" -#: common/setting/system.py:683 +#: common/setting/system.py:663 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:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Greške evidencije izveštaja" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Greške evidentiranja koje se dese prilikom generisanja izveštaja" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Veličina stranice" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Podrazumevana veličina strane za izveštaje u PDF formatu" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Zahtevaj jedinice parametara" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Globalno jedinstveni serijski brojevi" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Obriši ispražnjene zalihe" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Šablon koda serije" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "Šablon za generisanje podrazumevanih kodova serije stavki u zalihama" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Datum isteka zaliha" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Omogući funkcionalnost isteka zaliha" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Prodaja isteklih zaliha" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Dozvoli prodaju isteklih zaliha" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Vreme zastarevanja zaliha" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Izrada sa isteklim zalihama" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Dozvoli izradu sa isteklim zalihama" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Vlasnička kontrola zaliha" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Omogući vlasničku kontrolu nad lokacijama zaliha i stavkama" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Podrazumevana ikonica lokacije zaliha" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "Podrazumevana ikonica lokacije zaliha (prazno znači da nema ikonice)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Prikaži instalirane stavke sa zaliha" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Prikaži instalirane stavke sa zaliha u stok tabelama" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Proveri spisak materijala pri instalaciji stavki" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Dozvoli transfer van zaliha" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Referentni šablon naloga za izradu" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "Potreban šablon za generisanje referentnog polja naloga za izradu" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Potreban odgovoran vlasnik" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Odgovoran vlasnik mora biti dodeljen svakom nalogu" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Potreban aktivan deo" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "Spreči kreiranje naloga za izradu za neaktivne delove" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Potreban zaključan deo" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "Spreči kreiranje nalogaza izradu za otključane delove" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Potreban validan spisak materijala" -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Potrebno završavanje podređenih naloga" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Blokiraj dok ne prođe test" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Nalozi za prodaju označeni kao isporučeni će automatski biti završeni, zaobilazeći status isporučen" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Referentni šablon naloga za kupovinu" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "Potreban šablon pri generisanju referentnog polja naloga za kupovinu" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Izmeni završene naloge za kupovinu" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Automatski završi naloge za kupovinu" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Omogući zaboravljenu lozinku" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Omogući funkcionalnost zaboravljene lozinke na stranicama za prijavljivanje" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Omogući registraciju" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "Omogući registraciju korisnicima na stranicama za prijavljivanje" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Omogući SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Omogući SSO na stranicama za prijavljivanje" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Omogući SSO registraciju" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "Omogući SSO sinhronizaciju grupa" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSO ključ grupe" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "Nazivi grupa dobijaju atribute od IdP-a" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "Mapiranje SSO grupa" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "Ukloni grupe van SSO" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Email neophodan" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "Zahtevaj od korisnika da dostavi mejl prilikom registracije" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Automatski popuni SSO korisnike" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "Automatski popuni korisnikove podatke iz SSO naloga" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Email dva puta" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "Pitaj korisnika dva puta za email prilikom registracije" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Lozinka dva puta" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "Pitaj korisnika dva puta za lozinku prilikom registracije" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Dozvoljeni domeni" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Grupa pri registrovanju" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Nametni MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Korisnici moraju koristiti multifaktorsku bezbednost" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Proveri plugine pri pokretanju" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Proveri ažuriranja pluginova" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "Omogući periodično proveranje pluginova" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Omogući URL integraciju" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "Omogući da pluginovi dodaju URL rute" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Omogući integraciju u navigaciju" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Omogući integraciju pluginova u navigaciju" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Omogući integraciju aplikacija" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Omogući pluginovima da dodaju aplikacije" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Omogući integraciju planiranja" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Omogući da plugini izvršavaju planirane zadatke" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Omogući integraciju događaja" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Omogući da plugini odgovaraju na unutrašnje događaje" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Omogući integraciju interfejsa" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "Omogući integraciju pluginova u korisnički interfejs" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Ne uključuj eksterne lokacije" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Period automatskog popisa" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Prikaži puna imena korisnika" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "Prikaži puna imena korisnika umesto korisničkih imena" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Omogući podatke test stanica" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "Omogući prikupljanje podataka sa test stanica radi rezultata testova" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "Poslednje korišćene mašine za štampanje" msgid "Save the last used printing machines for a user" msgstr "Sačuvaj poslednju korišćenu mašinu za štampanje za korisnika" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "Interni deo je aktivan" msgid "Supplier is Active" msgstr "Dobavljač je aktivan" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Proizvođač" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Email adresa kontakta" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontakt" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adrese" @@ -4203,12 +4268,12 @@ msgstr "Beleške o isporuci za internu upotrebu" msgid "Link to address information (external)" msgstr "Link za adresne informacije (eksterni)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Deo proizvođača" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Osnovni deo" @@ -4221,8 +4286,8 @@ msgstr "Izaberi deo" msgid "Select manufacturer" msgstr "Izaberi proizvođača" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "Broj dela proizvođača" @@ -4250,8 +4315,8 @@ msgstr "Jedinice pakovanja moraju biti veće od nule" msgid "Linked manufacturer part must reference the same base part" msgstr "Povezani delovi dobavljača moraju referencirati isti osnovni deo" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Dobavljač" msgid "Select supplier" msgstr "Izaberi dobavljača" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Jedinica za držanje dobavljačevih zaliha" @@ -4290,15 +4355,15 @@ msgstr "URL za link dela eksternog dobavljača" msgid "Supplier part description" msgstr "Opis dela dobavljača" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "osnovni trošak" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimalna naplata (npr. taksa za slaganje)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Pakovanje" @@ -4315,7 +4380,7 @@ msgstr "Količina pakovanja" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "više" @@ -4339,23 +4404,23 @@ msgstr "Datum poslednjeg ažuriranja podataka o dostupnosti" msgid "Supplier Price Break" msgstr "Smanjenje cene dobavljača" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Podrazumevana valuta koja se koristi za ovog dobavljača" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Naziv kompanije" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Na zalihama" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Originalni podaci vrste" msgid "Errors" msgstr "Greške" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Važeće" @@ -4623,7 +4688,7 @@ msgstr "Broj kopija za štampanje od svakog natpisa" msgid "Connected" msgstr "Konektovano" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Nepoznato" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupa" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Referenca naloga" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Izvanredno" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Ima šifru projekta" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Kreirano do strane" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Kreirano pre" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Kreirano nakon" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Krajnji datum pre" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Krajnji datum nakon" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Ima cenu" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Završen pre" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Završen nakon" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Nalog" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Nalog završen" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Interni deo" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Nalog na čekanju" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Završeno" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Ima isporuku" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Nalog za kupovinu" msgid "Sales Order" msgstr "Nalog za prodaju" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Ukupna cena" msgid "Total price for this order" msgstr "Totalna cena ovog naloga" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Valuta naloga" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "Valuta za ovaj nalog (ostaviti prazno za podrazumevanu valutu kompanije)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Opis naloga (opciono)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Izaberi šifru projekta za ovaj nalog" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Link ka eksternoj stranici" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ciljani datum" @@ -4963,12 +5028,12 @@ msgstr "Lice za kontakt za ovaj nalog" msgid "Company address for this order" msgstr "Adresa kompanije za ovaj nalog" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Referenca naloga" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Status" @@ -4992,15 +5057,15 @@ msgstr "Referentni kod dobavljača naloga" msgid "received by" msgstr "primljeno od strane" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Datum kada je nalog završen" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Odredište" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Odredište za primljene stavke" @@ -5024,616 +5089,624 @@ msgstr "Količina mora biti pozitivan broj" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Mušterija" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Kompanija kojoj se prodaju stavke" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Status naloga za prodaju" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Referenca mušterije" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Referentni kod mušterijinog naloga" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Datum isporuke" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "isporučeno od strane" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Nalog je već završen" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Nalog je već otkazan" -#: order/models.py:1459 +#: order/models.py:1463 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:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 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:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Količina stavki" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Referenca stavke porudbžine" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Beleške stavke porudbžine" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Opis stavke porudžbine (opciono)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Dodatni kontekst za ovu porudžbinu" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Cena jedinice" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Stavka porudžbine naloga za kupovinu" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Deo dobavljača se mora poklapati sa dobavljačem" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Deo dobavljača" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Primljeno" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Broj primljenih stavki" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Kupovna cena" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Kupovna cena jedinice" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Dodatna porudbžina naloga za kupovinu" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Stavka porudžbine naloga za prodaju" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Prodajna cena" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Prodajna cena jedinice" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Poslato" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Isporučena količina" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Isporuka naloga za prodaju" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Datum isporuke" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Datum dostavljanja" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Datum dostavljanja isporuke" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Provereno od strane" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Korisnik koji je proverio ovu isporuku" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Isporuka" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Broj isporuke" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Broj praćenja" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Informacije o praćenju isporuke" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Broj računa" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Referentni broj za dodeljeni račun" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Isporuka je već poslata" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Isporuka nema alocirane stavke sa zaliha" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Dodatne porudbžine naloga za prodaju" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Alokacije naloga za prodaju" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Stavka sa zaliha nije dodeljena" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Ne mogu se alocirati zalihe porudbžini bez dela" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Alocirana količina ne sme da pređe količinu zaliha" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Količina alokacije mora da bude veća od nule" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Količina mora biti 1 za serijalizovane stavke sa zaliha" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Nalog za prodaju se ne poklapa sa isporukom" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 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:2614 +#: order/models.py:2645 msgid "Line" msgstr "Porudbžina" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Referenca isporuke naloga za prodaju" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Stavka" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Izaberi stavku sa zaliha za alokaciju" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Unesi količinu za alokaciju zaliha" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Referenca naloga za vraćanje" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Kompanija čije stavke su vraćene" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Status naloga za vraćanje" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "Vrati stavku porudbžine" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "Stavka sa zaliha mora biti određena" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "Količina vraćanja je premašila količinu zaliha" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "Količina vraćanja mora biti veća od nule" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Nevažeća količina za serijalizovane stavke sa zaliha" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Izaberi stavku za vraćanje od mušterije" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Primljeno datuma" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Ishod" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Ishod za ovu stavku porudžbine" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Doda" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "ID naloga" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "ID naloga koji će se duplirati" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Kopiraj porudžbine" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Kopiraj stavke porudžbine sa originalnog naloga" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Kopiraj dodatne porudžbine" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Kopiraj dodatne stavke porudžbine sa originalnog naloga" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Kopiraj parametre" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Završene porudbžine" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Dupliraj nalog" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Odredi opcije za dupliranje ovog naloga" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Nevažeći ID naloga" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Naziv dobavljača" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Nalog ne može biti otkazan" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "Dozvoli da nalog bude zatvoren sa nepotpunim porudžbinama" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "Nalog ima nepotpune stavke porudžbine" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Nalog nije otvoren" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Automatske cene" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Valuta kupovne cene" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Spoj stavke" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "Jedinica za praćenje zaliha" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Interni broj dela" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Interni naziv dela" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Deo dobavljača mora biti određen" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Nalog za kupovinu mora biti određen" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Dobavljač mora da se poklapa sa nalogom za kupovinu" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Nalog za kupovinu mora da se poklapa sa dobavljačem" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Stavka porudbžine" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Izaberi odredišnu lokaciju za primljene stavke" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Unesi šifru ture za nadolazeće stavke sa zaliha" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Datum isteka" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Unesi serijske brojeve za nadolazeće stavke sa zaliha" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Promeni informacije o pakovanju za nadolazeće stavke sa zaliha" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Dodatne beleške za nadolazeće stavke sa zaliha" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Bar kod" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Skeniran bar kod" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Bar kod je već u upotrebi" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Stavke porudžbine moraju biti dostavljene" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Odredišna lokacija mora biti određena" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Pružene vrednosti bar kodova moraju biti jedinstvene" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Isporuke" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Završene isporuke" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Valuta prodajne cene" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Alocirane stavke" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Nisu dostavljeni detalji isporuke" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Stavka porudžbine nije asocirana sa ovim nalogom" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Količina mora biti pozitivna" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Unesi serijske brojeve za alokaciju" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Isporuka je već isporučena" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Isporuka nije povezana sa ovim nalogom" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Nema pronađenih poklapanja za sledeće serijske brojeve" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Sledeći serijski brojevi su nedostupni" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Stavka porudžbine naloga za vraćanje" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Stavka porudžbine se ne poklapa sa nalogom za vraćanje" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Stavka porudžbine je već primljena" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "Količina za vraćanje" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Valuta cene porudžbine" @@ -5756,59 +5829,63 @@ msgstr "Je revizija" msgid "Has Revisions" msgstr "Ima revizije" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "Spisak materijala validan" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "Deo sklopa se može testirati" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Deo komponente se može testirati" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Koristi" @@ -5821,7 +5898,7 @@ msgstr "Kategorija dela" msgid "Part Categories" msgstr "Kategorije delova" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Podrazumevana lokacija" @@ -5849,7 +5926,7 @@ msgstr "Podrazumevane ključne reči za delove ove kategorije" msgid "Icon" msgstr "Ikonica" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikonica (opciono)" @@ -5870,984 +5947,1012 @@ msgstr "Podrazumevana vrednost" msgid "Default Parameter Value" msgstr "Podrazumevana vrednost parametra" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Delovi" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Ovaj deo se ne može izbrisati jer je zaključan" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Ovaj deo se ne može izbrisati jer je i dalje aktivan" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Ovaj deo se ne može obrisati jer se koristi u sklopu" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Deo '{self}' ne može biti korišćen u spisku materijala za '{parent}' (recursive)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Deo '{parent}' se koristi u spisku materijala za '{self}' (recursive)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "Interni broj dela se mora slagati sa regex šablonom {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "Deo ne može biti revizija samog sebe" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Revizije su dozvoljene samo za delove sklopove" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Ne može se izvršiti revizija šablonskog dela" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "Nadređeni deo mora biti vezan sa istim šablonom" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Stavka sa ovim serijskim brojem već postoji" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Duplirani interni brojevi dela nisu dozvoljeni u podešavanjima dela" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "Identična revizija dela već postoji" -#: part/models.py:1054 +#: part/models.py:1055 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:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Delovi ne mogu biti dodeljeni strukturnim kategorijama delova!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Naziv dela" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Jeste šablon" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Da li je ovaj deo šablonski deo?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Da li je ovaj deo varijanta drugog dela?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Varijanta od" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Opis dela (opciono)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Ključne reči" -#: part/models.py:1133 +#: part/models.py:1134 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:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Kategorija dela" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "Interni broj dela" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Revizija dela ili broj verzije" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revizija" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Da li je ovaj deo revizija drugog dela?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Revizija od" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Gde je ova stavka inače skladištena?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Podrazumevani istek" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimalne zalihe" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Minimalni dozvoljen nivo zaliha" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Jedinice mere za ovaj deo" -#: part/models.py:1248 +#: part/models.py:1258 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:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "Da li ovaj deo ima praćenje za više stavki?" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "Da li ovaj deo može imati svoje rezultate testa?" -#: part/models.py:1272 +#: part/models.py:1282 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:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Da li ovaj deo može biti prodat mušterijama?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Da li je ovaj deo aktivan?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Zaključani delovi se ne mogu menjati" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Suma spiska materijala" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Uskladištena suma spiska materijala" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "Spisak materijala proveren od strane" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Spisak materijala proveren datuma" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Korisnik koji je kreirao" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Vlasnik odgovoran za ovaj deo" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Prodaj više" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Valuta korišćena za vršenje proračuna o cenama" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Minimalna vrednost spiska materijala" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Minimalna vrednost komponenti delova" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Maksimalna vrednost spiska materijala" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Maksimalna vrednost komponenti delova" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Minimalna kupovna vrednost" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Minimalna istorijska kupovna vrednost" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Maksimalna kupovna vrednost" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Maksimalna istorijska kupovna vrednost" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Minimalna interna cena" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Minimalna cena bazirana na internim sniženjima cena" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Maksimalna interna cena" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Maksimalna vrednost bazirana na internim sniženjima cena" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Minimalna cena dobavljača" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Minimalna cena dela od eksternih dobavljača" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Maksimalna cena dobavljača" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Maksimalna cena dela od eksternih dobavljača" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Minimalna vrednost varijanti" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Izračunata minimalna vrednost varijanti delova" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Maksimalna vrednost varijanti" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Izračunata maksimalna vrednost varijanti delova" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Minimalna vrednost" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Promeni minimalnu vrednost" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Maksimalna vrednost" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Promeni maksimalnu vrednost" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Ukupna izračunata minimalna vrednost" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Ukupna izračunata maksimalna vrednost" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Minimalna prodajna cena" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Minimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Maksimalna prodajna cena" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Maksimalna prodajna cena bazirana na osnovu sniženja cena" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Minimalna prodajna vrednost" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Minimalna istorijska prodajna cena" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Maksimalna prodajna vrednost" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Maksimalna istorijska prodajna cena" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Deo za popis" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Broj stavki" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Broj individualnih unosa zaliha u vreme popisa" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Ukupne dostupne zalihe za vreme popisa" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Datum" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Datum kada je izvršen popis" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Minimalna vrednost zaliha" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Procenjena minimalna vrednost trenutnih zaliha" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Maksimalna vrednost zaliha" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Procenjena maksimalna vrednost trenutnih zaliha" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Smanjenje prodajne cene dela" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Šablon testa dela" -#: part/models.py:3655 +#: part/models.py:3665 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:3687 +#: part/models.py:3697 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:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Naziv testa" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Unesi naziv za ovaj test" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Test ključ" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Pojednostavljen ključ za test" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Opis testa" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Unesi opis za ovaj test" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Da li je ovaj test omogućen?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Neophodno" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Da li je neophodno da ovaj test prođe?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Zahteva vrednost" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Zahteva prilog" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "Validni izbori za ovaj test (razdvojeni zapetom)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 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:3968 +#: part/models.py:4030 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:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Izaberi nadređeni deo" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Pod-deo" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Izaberi deo koji će biti korišćen u spisku materijala" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Količina spiskova materijala za ovu stavku sa spiska materijala" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Ova stavka sa spiska materijala je opciona" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Referenca stavke sa spiska materijala" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Beleške stavki sa spiska materijala" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Suma" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Suma spiska materijala" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Validirano" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Ova stavka sa spiska materijala je validirana" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Biva nasleđeno" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 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:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Zamenski deo mora biti određen" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Zamenska stavka sa spiska materijala" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Nadređena stavka sa spiska materijala" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Zamenski deo" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Deo 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Deo 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Izaberi povezan deo" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Beleška za ovu relaciju" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Identična veza već postoji" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Nadređena kategorija" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Nadređena kategorija dela" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Podkategorije" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Rezultati" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Broj rezultata napravljenih na osnovu ovog šablona" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Valuta kupovine za ovu stavku sa zaliha" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Originalni deo" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Izaberi originalni deo za duplikaciju" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Kopiraj sliku" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Kopiraj sliku sa originalnog dela" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Kopiraj spisak materijala" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Kopiraj spisak materijala sa originalnog dela" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Kopiraj parametarske podatke sa originalnog dela" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Kopiraj beleške" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Kopiraj beleške sa originalnog dela" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Inicijalna količina zaliha" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Inicijalna lokacija zaliha" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Odredi inicijalnu lokaciju zaliha za ovaj deo" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Izaberi dobavljača (ostavi prazno za preskakanje)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Izaberi proizvođača (ostavi prazno za preskakanje)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Broj dela proizvođača" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Izabrana kompanija nije validan dobavljač" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Izabrana kompanija nije validan proizvođač" -#: part/serializers.py:529 +#: part/serializers.py:527 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:536 +#: part/serializers.py:534 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:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Naziv kategorije" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Izrađivanje" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Stavke sa zaliha" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Revizije" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Ukupne zalihe" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Nealocirane zalihe" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Varijante zaliha" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Dupliraj deo" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Kopiraj inicijalne podatke od drugog dela" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Početne zalihe" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Kreiraj deo sa početnom količinom zaliha" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Informacije o dobavljaču" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Dodaj inicijalne informacije o dobavljaču za ovaj deo" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Kopiraj parametre kategorije" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Kopiraj parametarske šablone sa izabrane kategorije dela" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Postojeća slika" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Ime fajla postojeće slike dela" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Fajl sa slikom ne postoji" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Validiraj ceo spisak materijala" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Može se izgraditi" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Minimalna cena" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Izmeni izračunatu vrednost za minimalnu cenu" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Minimalna valuta cene" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Maksimalna cena" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Izmeni izračunatu vrednost maksimalne cene" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Maksimalna valuta cene" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Ažuriraj" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Ažuriraj cene za ovaj deo" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "Minimalna cena ne sme biti veća od maksimalne cene" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "Maksimalna cena ne sme biti manja od minimalne cene" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Izaberi nadređeni sklop" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Izaberi komponentu dela" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "Izaberi deo sa kog će se kopirati spisak materijala" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Ukloni postojeće podatke" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Ukloni postojeće stavke sa spiska materijala pre kopiranja" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Uključi nasleđeno" -#: part/serializers.py:2006 +#: part/serializers.py:2004 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:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Preskoči nevažeće vrste" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "Omogući ovu opciju za preskakanje nevažećih vrsta" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Kopiraj zamenske delove" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "Kopiraj zamenske delove prilikom duplikacije stavki sa spiska materijala" @@ -7099,15 +7204,15 @@ msgstr "Količina za alociranje" msgid "Label printing failed" msgstr "Greška pri štampanju natpisa" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Greška pri renderovanju natpisa u PDF" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Greška pri renderovanju natpisa u HTML" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Nijedna stavka nije poslata na štampu" @@ -7168,7 +7273,7 @@ msgstr "Pruža ugrađenu podršku za bar kodove" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "PDF štampanje natpisa" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Pruža podršku za štampanje PDF natpisa" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Debug mod" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Omogućava debug mod - vraća sirov HTML umesto PDF-a" @@ -7568,7 +7673,7 @@ msgstr "Border" msgid "Print a border around each label" msgstr "Štampa border oko svakog natpisa" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Lendskejp" @@ -8029,7 +8134,7 @@ msgstr "Plugin ne podržava štampanje natpisa" msgid "Invalid label dimensions" msgstr "Nevažeće dimenzije natpisa" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Nema važećih stavki dostavljenih šablonu" @@ -8073,112 +8178,112 @@ msgstr "Priloži kao model uz štampanje" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Sačuvaj izveštaj kao prilog uz uvezanu instancu modela prilikom štampanja" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Šablon imena fajlova" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Šablon za generisanje imena fajlova" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Šablon je omogućen" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "Tip ciljanog modela za šablon" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filteri" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Filteri upita nad šablonima (lista razdvojena zarezom ključ=vrednost parova)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Šablonski fajl" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Veličina strane za PDF izveštaje" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Renderuj izveštaj u landscape orijentaciji" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Širina (u milimetrima)" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Širina natpisa, u milimetrima" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Visina (u milimetrima)" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Visina natpisa, u milimetrima" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Isečak" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Izveštaj isečka fajla" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Opis isečka fajla" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Sredstvo" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Izveštaj fajla sredstva" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Opis fajla sredstva" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serijski broj" @@ -8538,7 +8643,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Lokacija zaliha" @@ -8546,11 +8651,11 @@ msgstr "Lokacija zaliha" msgid "Stock Locations" msgstr "Lokacija zaliha" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Vlasnik" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Izaberi vlasnika" @@ -8558,7 +8663,7 @@ msgstr "Izaberi vlasnika" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Stavke sa zaliha ne mogu biti direktno locirane u strukturnim lokacijama zaliha, ali mogu biti locirane u podređenim lokacijama." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Eksterna" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Deo mora biti određen" -#: stock/models.py:911 +#: stock/models.py:924 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:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Stavka sa zaliha ne može biti kreirana za virtuelne delove" -#: stock/models.py:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Stavka ne može da pripada samoj sebi" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Referenca izgradnje ne ukazuje na isti objekat dela" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Nadređena stavka sa zaliha" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Osnovni deo" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Gde je locirana ova stavka sa zaliha?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Pakovanje u kom je ova stavka sa zaliha" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Instalirano u" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Da li je ova stavka instalirana u drugu stavku?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Serijski broj za ovu stavku" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Šifra ture za ovu stavku sa zaliha" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Količina zaliha" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Izvorna gradnja" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Nalog za ovu stavku sa zaliha" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Potrošeno od strane" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Nalog za izradu koji je potrošio ovu stavku sa zaliha" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Izvorni nalog za kupovinu" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Nalog za kupovinu za ovu stavku sa zaliha" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Odredište naloga za prodaju" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Obriši kad je potrošeno" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Obriši ovu stavku sa zaliha kada su zalihe potrošene" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Cena kupovine jedne jedinice u vreme kupovine" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Konvertovano u deo" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Deo nije postavljen kao deo koji je moguće pratiti" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Količina mora biti ceo broj" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Serijski brojevi moraju biti dostavljeni kao lista" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Količine se ne poklapaju sa serijskim brojevima" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Test šablon ne postoji" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Stavka sa zaliha je dodeljena nalogu za prodaju" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Stavka sa zaliha je instalirana u drugu stavku" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Stavka sa zaliha sadrži druge stavke" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "Stavka sa zaliha je dodeljena mušteriji" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Stavka sa zaliha je trenutno u produkciji" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Serijalizovane zalihe se ne mogu spojiti" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Dupliraj stavke sa zaliha" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "Stavke sa zaliha se moraju odnositi na isti deo" -#: stock/models.py:2106 +#: stock/models.py:2130 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:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Statusne šifre zaliha moraju da se poklapaju" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "Praćenje stavke sa zaliha" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Ulazne beleške" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "Rezultat testa stavke sa zaliha" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "Vrednost mora biti dostavljena za ovaj test" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "Prilog mora biti dostavljen za ovaj test" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "Nevažeća vrednost za ovaj test" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Rezultat testa" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Vrednost završetka testa" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Prilog uz test rezultat" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Beleške sa testa" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "Stanica za testiranje" -#: stock/models.py:3087 +#: stock/models.py:3111 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:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Započeto" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "Vreme početka testa" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "Završeno" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "Vreme završetka testa" @@ -8929,7 +9042,7 @@ msgstr "Unesi serijske brojeve za nove stavke" msgid "Supplier Part Number" msgstr "Dobavljački broj dela" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Isteklo" @@ -9466,131 +9579,131 @@ msgstr "Poslednji put kada je token korišćen" msgid "Revoked" msgstr "Opozvano" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Skup dozvola" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Pregledaj" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Dozvola za pregled stavki" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Dodaj" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Dozvola za dodavanje stavki" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Promeni" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Dozvole za izmenu stavki" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Obriši" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Dozvola za brisanje stavki" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/sv/LC_MESSAGES/django.po index 8c251d42cb..5366e73e04 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Swedish\n" "Language: sv_SE\n" @@ -89,6 +89,7 @@ msgstr "Kunde inte konvertera {original} till {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Ogiltigt antal angivet" @@ -104,11 +105,11 @@ msgstr "Ange datum" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Anslutningsfel" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Servern svarade med ogiltig statuskod" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Undantag inträffade" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Servern svarade med ogiltigt innehållslängdsvärde" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Bilden är för stor" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Nedladdning av bilder överskred maximal storlek" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Fjärrservern returnerade tomt svar" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Angiven URL är inte en giltig bildfil" @@ -219,7 +220,7 @@ msgstr "Logga in på appen" msgid "Email" msgstr "E-postadress" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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." @@ -263,124 +264,108 @@ msgstr "Referensen måste matcha obligatoriskt mönster" msgid "Reference number is too large" msgstr "Referensnumret är för stort" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Ogiltigt val" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Namn" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Beskrivning" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Beskrivning (valfritt)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Sökväg" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown anteckningar (valfritt)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Streckkodsdata" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Tredje parts streckkodsdata" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Streckkodsdata" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Unik hash med streckkodsdata" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Befintlig streckkod hittades" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Serverfel" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Ett fel har loggats av servern." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Måste vara ett giltigt nummer" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Valuta" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Välj valuta från tillgängliga alternativ" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Ogiltigt värde" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Fjärransluten bild" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL för fjärrbildsfil" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Nedladdning av bilder från fjärr-URL är inte aktiverad" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "Ogiltig fysisk enhet" msgid "Not a valid currency code" msgstr "Inte en giltig valutakod" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Orderstatus" @@ -561,21 +546,21 @@ msgstr "Orderstatus" msgid "Parent Build" msgstr "Föregående tillverkning" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Inkludera varianter" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Inkludera varianter" msgid "Part" msgstr "Del" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -605,7 +590,7 @@ msgstr "Kategori" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "Tillverkningen måste avbrytas innan den kan tas bort" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Valfri" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "Spårad" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Testbar" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Allokerad" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Konsumerad" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Byggorder" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Plats" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Tillverknings order referens" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Tillverknings status" msgid "Build status code" msgstr "Tillverkning statuskod" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Batchkod" @@ -870,8 +855,8 @@ msgstr "Batchkod" msgid "Batch code for this build output" msgstr "Batch-kod för denna byggutdata" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Skapad" @@ -891,7 +876,7 @@ msgstr "Datum för slutförande" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Slutförandedatum" @@ -907,8 +892,8 @@ msgstr "Utfärdad av" msgid "User who issued this build order" msgstr "Användare som utfärdade denna tillverknings order" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Ansvarig" @@ -917,12 +902,12 @@ msgstr "Ansvarig" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Extern länk" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Länk till extern URL" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Projektkod" @@ -968,7 +953,7 @@ msgstr "En tillverknings order har slutförts" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Ingen byggutgång angiven" @@ -980,47 +965,47 @@ msgstr "Byggutgång är redan slutförd" msgid "Build output does not match Build Order" msgstr "Byggutgång matchar inte bygg order" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Bygg objekt" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Bygg objekt" msgid "Quantity" msgstr "Antal" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Antal måste vara 1 för serialiserat lager" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Lagerposten är överallokerad" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Artikel i lager" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Källa lagervara" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Lagersaldo att allokera för att bygga" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Installera till" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Destination lagervara" @@ -1099,7 +1084,7 @@ msgstr "Destination lagervara" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Delnamn" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Serienummer" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Acceptera ofullständig" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Spårbar" @@ -1412,29 +1397,29 @@ msgstr "Spårbar" msgid "Inherited" msgstr "Ärvd" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Tillåt varianter" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Uppdaterad" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Uppdaterad av" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Unik projektkod" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Projektbeskrivning" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Användare" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Pris" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktiv" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Hemlig" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Meddelande-ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Värd" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Id" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Titel" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Länk" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Sammanfattning" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Läs" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Bildfil" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Symbol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Definition" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Bilaga" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Saknad fil" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Extern länk saknas" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Modelltyp" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Välj fil att bifoga" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Kommentar" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Uppladdningsdatum" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Filstorlek" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Logisk nyckel" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Värde" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etikett" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Färg" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Modell" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Låst" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Källsträng" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Skapad" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Senast uppdaterad" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Parametermall" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Kryssruta" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Val" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Aktiverad" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Mall" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Data" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Streckkodsdata" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Tidsstämpel" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Sammanhang" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Svar" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Resultat" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Ett fel inträffade" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "E-postmeddelande" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Bekräftad" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Inget svar" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "Tråd-ID" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Tråd" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "E-posttrådar" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Nyckel" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "Filnamn" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Modelltyp" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "dagar" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "Ladda ner från URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Stöd för streckkoder" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Komponent" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Virtuell" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Delar är virtuella som standard" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Visa relaterade delar" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Visa relaterade delar för en del" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Visningsformat för delnamn" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Formatera för att visa artikelnamnet" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Interna priser" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Aktivera etikettutskrift" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Aktivera etikettutskrift från webbgränssnittet" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Etikettbild DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Aktivera rapporter" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Aktivera generering av rapporter" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Debugläge" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Sidstorlek" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "Standard sidstorlek för PDF-rapporter" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Aktivera registrering" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Aktivera SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Tillåtna domäner" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Tillverkare" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Kontakt" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adress" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Basdel" @@ -4221,8 +4286,8 @@ msgstr "Välj del" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "MPN" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Leverantör" msgid "Select supplier" msgstr "Välj leverantör" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Företagsnamn" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "I lager" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "Fel" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Giltig" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "Ansluten" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Okänd" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grupp" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Har projektkod" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Skapad av" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Skapad efter" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Intern del" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Slutförd" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "Försäljningsorder" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "Startdatum" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Måldatum" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Status" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Mål" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Kund" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Skickad" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Leveransdatum" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Kontrollerad av" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Fakturanummer" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Allokeringsmängden måste vara större än noll" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Rad" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Kopiera parametrar" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Leverantörsnamn" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Streckkod" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Använder" @@ -5821,7 +5898,7 @@ msgstr "Delkategori" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "Ikon" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Ikon (valfritt)" @@ -5870,984 +5947,1012 @@ msgstr "Standardvärde" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Artiklar" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Delnamn" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Är mall" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Variant av" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Nyckelord" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Delkategori" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revision" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Datum" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Validerad" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Del 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Del 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Underkategorier" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Resultat" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Originaldel" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Kopiera bild" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Kopiera test" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Kategorinamn" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Revisioner" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Uppdatera" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Hoppa över ogiltiga rader" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filter" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Mallfil" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Bredd [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Höjd [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Serienummer" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Ägare" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Välj ägare" @@ -8558,7 +8663,7 @@ msgstr "Välj ägare" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Grunddel" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Konverterad till del" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Testresultat" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "Startad" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Visa" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Lägg till" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Ändra" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Radera" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "Gäst" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "Språk" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "Tema" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "Visningsnamn" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Användartyp" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Organisation" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Primär grupp" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/th/LC_MESSAGES/django.po index 1fe5cc8972..6fc7cd6b1f 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Thai\n" "Language: th_TH\n" @@ -89,6 +89,7 @@ msgstr "" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "ปริมาณสินค้าไม่ถูกต้อง" @@ -104,11 +105,11 @@ msgstr "ป้อนวันที่" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "การเชื่อมต่อขัดข้อง" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "ไฟล์รูปภาพมีขนาดใหญ่เกินไป" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "อีเมล" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "ชื่อ" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "คำอธิบาย" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "ข้อมูลบาร์โค้ด" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "บาร์โค้ดนี้มีในระบบแล้ว" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "เกิดข้อผิดพลาดที่เซิร์ฟเวอร์" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "ต้องเป็นตัวเลข" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "สกุลเงิน" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "" @@ -687,32 +672,32 @@ msgstr "" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "สถานที่" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "ออกโดย" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "จำนวนต้องมีค่ามากกว่า 0" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "ผู้ใช้งาน" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "ลิงก์" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "ไฟล์แนบ" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "ไม่พบไฟล์" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "เลือกไฟล์ที่ต้องการแนบ" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "ความคิดเห็น" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "ชื่อไฟล์" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "" @@ -4221,8 +4286,8 @@ msgstr "" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "สำเร็จแล้ว" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "สถานะ" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "จัดส่งแล้ว" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "ชิ้นส่วน" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/tr/LC_MESSAGES/django.po index 51b87a5749..ac6a778ad0 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Turkish\n" "Language: tr_TR\n" @@ -89,6 +89,7 @@ msgstr "{original} birimi {unit} birimine dönüştürülemedi" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Geçersiz veri sağlandı" @@ -104,11 +105,11 @@ 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:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Bağlantı hatası" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Sunucu geçersiz durum kodu ile cevap verdi" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "İstisna oluştu" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Sunucu geçersiz Content-Length değeriyle yanıt verdi" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Görsel boyutu çok büyük" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Görsel indirme maksimum boyutu aştı" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Uzak sunucu boş cevap döndü" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "Sağlanan URL geçerli bir görsel dosyası değil" @@ -219,7 +220,7 @@ msgstr "Uygulamaya giriş yapın" msgid "Email" msgstr "E-posta" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 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." @@ -263,124 +264,108 @@ msgstr "Referans {pattern} deseniyle mutlaka eşleşmeli" msgid "Reference number is too large" msgstr "Referans sayısı çok fazla" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Geçersiz seçim" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Adı" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Açıklama" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Yol" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Aynı kaynak altında birden fazla aynı isim kullanılamaz" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown notları (isteğe bağlı)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Barkod Verisi" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Üçüncü parti barkod verisi" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Barkod Hash" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Barkod verisinin benzersiz hash'i" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Var olan barkod bulundu" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Sunucu Hatası" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Bir hafta sunucu tarafından kayıt edildi." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Geçerli bir numara olmalı" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Para birimi" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Mevcut seçeneklerden para birimini seçin" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "Bu alan boş olamaz." -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Geçersiz değer" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Uzak Görsel" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "Uzak görselin dosya URL'si" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "Uzak URL'den görsel indirme etkin değil" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "Uzak URL'den görsel indirilemedi" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "Geçersiz içerik türü biçimi" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "İçerik türü bulunamadı" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "İçerik türü gerekli mixin sınıfı ile eşleşmemektedir" @@ -552,8 +537,8 @@ msgstr "Geçersiz fiziksel birim" msgid "Not a valid currency code" msgstr "Geçerli bir para birimi kodu değil" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Sipariş Durumu" @@ -561,21 +546,21 @@ msgstr "Sipariş Durumu" msgid "Parent Build" msgstr "Üst Yapım İşi" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "Varyantları Dahil Et" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "Varyantları Dahil Et" msgid "Part" msgstr "Parça" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Kategori" @@ -605,7 +590,7 @@ msgstr "Kategori" msgid "Ancestor Build" msgstr "Kök Üretim" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Bana atandı" @@ -653,11 +638,11 @@ msgstr "Daha önce tamamlandı" msgid "Completed after" msgstr "Sonra tamamlandı" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "En yakın tarih" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "Maksimum Tarih" @@ -669,16 +654,16 @@ msgstr "Ağacı Hariç Tut" msgid "Build must be cancelled before it can be deleted" msgstr "Üretim silinemeden önce iptal edilmelidir" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Sarf Malzemesi" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "İsteğe Bağlı" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Montaj" @@ -687,32 +672,32 @@ msgstr "Montaj" msgid "Tracked" msgstr "İzlenen" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Test Edilebilir" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "Sipariş Açık" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Tahsis Edildi" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Tüketildi" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Siparişte" @@ -720,7 +705,7 @@ msgstr "Siparişte" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Üretim Emri" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Konum" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "Çıktı" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Üretim Emri Referansı" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Üretim Durumu" msgid "Build status code" msgstr "Üretim durum kodu" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Sıra numarası" @@ -870,8 +855,8 @@ msgstr "Sıra numarası" msgid "Batch code for this build output" msgstr "Bu üretim çıktısının parti kodu" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Oluşturulma tarihi" @@ -891,7 +876,7 @@ msgstr "Hedef tamamlama tarihi" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Tamamlama tarihi" @@ -907,8 +892,8 @@ msgstr "Düzenleyen" msgid "User who issued this build order" msgstr "Bu üretim emrini düzenleyen kullanıcı" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Sorumlu" @@ -917,12 +902,12 @@ msgstr "Sorumlu" msgid "User or group responsible for this build order" msgstr "Bu üretim emrinden sorumlu kullanıcı veya grup" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Harici Bağlantı" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Harici URL'ye bağlantı" @@ -934,8 +919,8 @@ msgstr "Üretim Önceliği" msgid "Priority of this build order" msgstr "Bu üretim emrinin önceliği" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Proje Kodu" @@ -968,7 +953,7 @@ msgstr "Bir üretim emri tamamlandı" msgid "Serial numbers must be provided for trackable parts" msgstr "İzlenebilir parçalar için seri numaraları sağlanmalıdır" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Hiçbir üretim çıktısı belirtilmedi" @@ -980,47 +965,47 @@ msgstr "Üretim çıktısı zaten tamamlanmış" msgid "Build output does not match Build Order" msgstr "Üretim çıktısı, üretim emri ile eşleşmiyor" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Miktar sıfırdan büyük olmalıdır" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "Miktar çıktı miktarından büyük olamaz" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "Üretim çıktısı tüm gerekli testleri geçmedi" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "Tahsis edilen stok kalemleri hâlâ üretimde" -#: build/models.py:1219 +#: build/models.py:1221 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:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Üretim Emri Satırı" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Üretim nesnesi" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Üretim nesnesi" msgid "Quantity" msgstr "Miktar" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Üretim emri için gereken miktar" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "Tüketilen Stok Miktarı" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "Seçilen stok kalemi BOM satırı ile eşleşmiyor" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Seri numaralı stok için miktar bir olmalı" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Stok kalemi fazladan tahsis edilmiş" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Stok Kalemi" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Kaynak stok kalemi" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "Üretime tahsis edilecek stok miktarı" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Kur" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Hedef stok kalemi" @@ -1099,7 +1084,7 @@ msgstr "Hedef stok kalemi" msgid "Build Level" msgstr "Üretim Seviyesi" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Parça Adı" @@ -1135,7 +1120,7 @@ msgstr "İzlenebilir parçalar için tamsayı miktar gerekir" 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Seri Numaraları" @@ -1156,8 +1141,8 @@ msgstr "Seri Numaralarını Otomatik Tahsis Et" msgid "Automatically allocate required items with matching serial numbers" msgstr "Eşleşen seri numaralı gerekli kalemleri otomatik tahsis et" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "Şu seri numaraları zaten varlar veya geçersizler" @@ -1245,7 +1230,7 @@ msgstr "Stok kalemlerinin bu üretim emrine tamamen tahsis edilmediğini kabul e msgid "Required stock has not been fully allocated" msgstr "Gerekli stok tamamen tahsis edilemedi" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Tamamlanmamış Kabul et" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part üretim emri ile aynı parçayı göstermelidir" msgid "Item must be in stock" msgstr "Kalem stokta olmalıdır" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Mevcut miktar ({q}) aşıldı" @@ -1306,7 +1291,7 @@ msgstr "İzlenen parçaların tahsisi için üretim çıktısı belirtilmelidir" 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Ayrılma ögeleri sağlanmalıdır" @@ -1386,9 +1371,9 @@ msgstr "Kur" msgid "Build" msgstr "Yap" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Tedarikçi Parçası" @@ -1404,7 +1389,7 @@ msgstr "Üretim Referansı" msgid "Part Category Name" msgstr "Parça Kategorisi Adı" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Takip Edilebilir" @@ -1412,29 +1397,29 @@ msgstr "Takip Edilebilir" msgid "Inherited" msgstr "Devralınmış" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Varyantlara İzin Ver" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "ML Ögesi" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "Üretimde" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "Üretim için Planlandı" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Harici Stok" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Mevcut Stok" @@ -1531,6 +1516,10 @@ 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:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Kullanıcının bu eki silmek için izni yok" @@ -1554,610 +1543,634 @@ msgstr "Eklenti yok" msgid "Project Code Label" msgstr "Proje Kodu Etiketi" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Güncellendi" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "Son güncellemenin zaman damgası" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "Güncelleyen" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "Bu nesneyi en son güncelleyen kullanıcı" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Eşsiz proje kodu" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Proje açıklaması" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "Bu projeden sorumlu kullanıcı veya grup" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "Ayarlar anahtarı" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Ayarlar değeri" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Seçilen değer geçerli bir seçenek değil" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Değer bir boolean değer olmalıdır" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Değer bir integer değer olmalıdır" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "Değer geçerli bir sayı olmalıdır" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "Değer doğrulama kontrollerini geçemiyor" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Anahtar dizesi benzersiz olmalı" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Kullanıcı" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Fiyat kademesi miktarı" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Fiyat" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Belirtilen miktardaki birim fiyat" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Bitiş Noktası" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Bu web kancasının alındığı uç nokta" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Bu web kancası için ad" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Aktif" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Bu web kancası aktif mi" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Token" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Erişim için belirteç" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Gizli" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "HMAC için paylaşılan gizli bilgi" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Mesaj ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Bu mesaj için benzersiz tanımlayıcı" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Sağlayıcı" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Bu mesajın alındığı ana bilgisayar" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Başlık" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Bu mesajın başlığı" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Gövde" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Bu mesajın gövdesi" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "Bu mesajın alındığı uç nokta" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Üzerinde çalışıldı" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "Bu mesajdaki iş bitirildi mi?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "Kimlik" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Başlık" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Bağlantı" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Yayınlandı" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Yazar" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Özet" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Oku" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Haberi okudunuz mu?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Görsel dosyası" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "Bu görsel için hedef model türü" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "Bu görsel için hedef model ID" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "Özel Birim" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "Birim simgesi benzersiz olmalıdır" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "Birim adı geçerli bir tanımlayıcı olmalıdır" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Birim adı" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Sembol" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "İsteğe bağlı birim simgesi" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Tanımlama" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Birim tanımlaması" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Ek" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Eksik dosya" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Bozuk dış bağlantı" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "Model türü" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "Görsel için hedef model türü" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Eklenecek dosyayı seç" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Yorum" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "Ek yorumu" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Yükleme tarihi" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Dosyanın yüklendiği tarih" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Dosya Boyutu" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Bayt cinsinden dosya boyutu" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "Ek için belirtilen model türü geçersiz" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "Özel Durum" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "Özel Durumlar" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "Referans Durum Seti" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "Bu özel durum ile genişletilen durum seti" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "Mantıksal anahtar" -#: common/models.py:2115 +#: common/models.py:2190 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:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Değer" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "Modeller veritabanına kaydedilecek sayısal değer" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "Durumun adı" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Etiket" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "Ön yüzde gösterilecek etiket" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Renk" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "Ön yüzde gösterilecek renk" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Model" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "Bu durumun ilişkilendirildiği model" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "Model seçilmelidir" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "Anahtar Seçilmelidir" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "Mantıksal anahtar seçilmelidir" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "Anahtar, mantık anahtarından farklı olmalıdır" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "Geçerli bir referans durum sınıfı sağlanmalıdır" -#: common/models.py:2192 +#: common/models.py:2267 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:2199 +#: common/models.py:2274 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:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "İsim, referans durumunun isimlerinden farklı olmalıdır" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Seçim Listesi" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "Seçim Listeleri" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "Seçim listesinin adı" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "Seçim listesinin açıklaması" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Kilitli" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "Bu seçim listesi kilitli mi?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "Bu seçim listesi kullanılabilir mi?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "Kaynak Eklentisi" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "Seçim listesini sağlayan eklenti" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "Kaynak Dize" -#: common/models.py:2287 +#: common/models.py:2362 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:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "Varsayılan Girdi" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "Bu seçim listesi için varsayılan girdi" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Oluşturuldu" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "Seçim listesinin oluşturulduğu tarih ve saat" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Son Güncelleme" -#: common/models.py:2309 +#: common/models.py:2384 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:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "Seçim Listesi Girdisi" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "Seçim Listesi Girişleri" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "Bu girdinin ait olduğu seçim listesi" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "Seçim listesi girdisinin değeri" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "Seçim listesi girdisi için etiket" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "Seçim listesi girdisinin açıklaması" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "Bu seçim listesi girdisi aktif mi?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Parametre Şablonu" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "Parametre Şablonları" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Onay kutusu parametrelerinin birimleri olamaz" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "Onay kutusu parametrelerinin seçenekleri olamaz" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Seçenekler eşsiz olmalıdır" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Parametre şablon adı benzersiz olmalıdır" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "Bu parametre şablonu için hedef modeli türü" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Parametre Adı" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Birim" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Bu parametre için fiziksel birimler" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Parametre açıklaması" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Onay kutusu" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Bu parametre bir onay kutusu mu?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Seçenekler" -#: common/models.py:2577 +#: common/models.py:2652 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:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "Bu parametre için seçim listesi" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Etkin" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "Bu parametre şablonu etkin mi?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "Parametre" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "Parametreler" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Parametre değeri için geçersiz seçim" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "Parametre için belirtilen model türü geçersiz" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "Model ID" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "Bu parametre için hedef modelin ID'si" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Şablon" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "Parametre şablonu" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Veri" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Parametre Değeri" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Parametre Değeri" msgid "Note" msgstr "Not" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "İsteğe bağlı not alanı" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "Barkod Taraması" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "Barkod verisi" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "Barkodu taratan kullanıcı" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "Zaman damgası" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "Barkod taramasının tarihi ve saati" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "Barkodu işleyen URL uç noktası" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Bağlam" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "Barkod taraması için bağlam verisi" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "Yanıt" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "Barkod taramasından gelen yanıt verisi" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Sonuç" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "Barkod taraması başarılı mıydı?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "Bir hata oluştu" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "E-posta İletisi" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "E-posta İletileri" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "Duyuruldu" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "Gönderildi" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "Başarısız" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "Teslim edildi" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "Onaylandı" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "Gelen" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "Giden" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "Yanıt Yok" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "Teslimat Takibi" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "Okumayı Takip Et" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "Tıklamayı Takip Et" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "Global ID" -#: common/models.py:3096 +#: common/models.py:3171 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:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "Konu Kimliği" -#: common/models.py:3105 +#: common/models.py:3180 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:3114 +#: common/models.py:3189 msgid "Thread" msgstr "Konu" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "Bu mesaja bağlı konu" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "Öncelik" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "E-Posta Konusu" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "E-posta Konuları" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "Anahtar" -#: common/models.py:3183 +#: common/models.py:3258 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:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "Bu konu için benzersiz tanımlayıcı" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "Dahili Olarak Başlatıldı" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "Bu konu dahili olarak mı başlatıldı?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "Konunun oluşturulduğu tarih ve saat" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "Konunun son güncellendiği tarih ve saat" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Teslim Alınan Kalemler" @@ -2457,7 +2470,7 @@ msgstr "Dosya adı" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "Model Tipi" @@ -2601,13 +2614,13 @@ msgstr "Para Birimi Güncelleme Aralığı" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "günler" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "Kullanılacak para birimi güncelleme eklentisi" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "URL'den indir" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "İndirme Boyutu Sınırı" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "Uzak görsel için izin verilebilir maksimum indirme boyutu" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "URL'den indirmek için kullanılan kullanıcı aracısı" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "Sıkı URL Doğrulama" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "URL'leri doğrularken şema tanımlamasını gerekli kıl" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Güncelleme Kontrol Aralığı" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Otomatik Yedekleme" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "Veritabanı ve ortam dosyalarını otomatik yedeklemeyi etkinleştir" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Otomatik Yedekleme Aralığı" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Görev Silme Aralığı" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Hata Günlüğü Silme Aralığı" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Bildirim Silme Aralığı" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "E-posta Silme Aralığı" -#: common/setting/system.py:363 +#: common/setting/system.py:343 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:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "E-posta Kaydını Koru" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "E-posta kayıt girdilerinin silinmesini engelle" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Barkod Desteği" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "Barkod Sonuçlarını Depola" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "Barkod tarama sonuçlarını veritabanına depola" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "Maksimum Barkod Tarama Sayısı" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "Depolanacak maksimum barkod tarama sonuçları sayısı" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Barkod Girdi Gecikmesi" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Barkod girdi işleme gecikme süresi" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Barkod Web Kamerası Desteği" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "Barkod Verisini Göster" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "Barkod verisini tarayıcıda metin olarak görüntüle" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "Barkod Üreteci Eklentisi" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "Dahili barkod üretimi için kullanılacak eklenti" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Parça Revizyonları" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Parça için revizyon alanını etkinleştir" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "Yalnızca Montaj Revizyonu" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "Yalnızca montaj parçaları için revizyona izin ver" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "Montajdan Silmeye İzin Ver" -#: common/setting/system.py:432 +#: common/setting/system.py:412 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:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "DPN Regex" -#: common/setting/system.py:438 +#: common/setting/system.py:418 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:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Yinelenen DPN'ye İzin Ver" -#: common/setting/system.py:442 +#: common/setting/system.py:422 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:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "DPN Düzenlemeye İzin Ver" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Parça ML Verisini Kopyala" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Parça Parametre Verisini Kopyala" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Parça Test Verisini Kopyala" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Kategori Paremetre Sablonu Kopyala" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "Parça oluştururken kategori parametre şablonlarını kopyala" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Parçaları varsayılan olan şablondur" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Bileşen" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Satın Alınabilir" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Parçalar varsayılan olarak satın alınabilir" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Satılabilir" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Parçalar varsayılan olarak satılabilir" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Parçalar varsayılan olarak takip edilebilir" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Sanal" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Parçalar varsayılan olarak sanaldır" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "İlgili parçaları göster" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "Bir parça için ilgili parçaları görüntüle" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Başlangıç Stok Verisi" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "İlk Tedarikçi Bilgileri" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Parça Adı Görüntüleme Biçimi" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Parça adını görüntüleme biçimi" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "Parça Kategorisi Varsayılan Simgesi" -#: common/setting/system.py:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "Minimum Fiyatlandırma Ondalık Basamakları" -#: common/setting/system.py:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Maksimum Fiyatlandırma Ondalık Basamakları" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Tedarikçi Fiyatlandırmasını Kullan" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "Tedarikçi fiyat kademelerini genel fiyat hesaplamalarına dahil et" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Satın Alma Geçmişini Geçersiz Kılma" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Stok Kalemi Fiyatlandırmasını Kullan" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Stok Kalemi Fiyatlandırma Süresi" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Varyant Fiyatlandırması Kullan" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "Genel fiyat hesaplamalarına varyant fiyatlarını dahil et" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Yalnızca Aktif Varyantlar" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "Fiyatlandırmayı Otomatik Güncelle" -#: common/setting/system.py:627 +#: common/setting/system.py:607 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:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Fiyatlandırmayı Yeniden Oluşturma Aralığı" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Dahili Fiyatlar" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Parçalar için dahili fiyatları etkinleştir" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Dahili Fiyat Geçersiz Kılma" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "Malzeme listesinde sıfır miktara izin ver" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Etiket yazdırmayı etkinleştir" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "Web arayüzünden etiket yazdırmayı etkinleştir" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "Etiket Görseli DPI Değeri" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Raporları Etkinleştir" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Rapor üretimini etkinleştir" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Hata Ayıklama Modu" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "Raporları hata ayıklama modunda oluştur (HTML çıktısı)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "Rapor Hatalarını Günlüğe Kaydet" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "Raporlar üretirken oluşan hataları günlüğe kaydet" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Sayfa Boyutu" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "PDF raporlar için varsayılan sayfa boyutu" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Parametre Birimlerini Zorunlu Kıl" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Küresel Çapta Benzersiz Seri Numaraları" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Tükenen Stoku Sil" -#: common/setting/system.py:715 +#: common/setting/system.py:695 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:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Parti Kodu Şablonu" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Stok Sona Erme Tarihi" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Stokun sona erme işlevselliğini etkinleştir" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Süresi Dolan Stoku Sat" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Süresi dolan stok satışına izin ver" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Stok Eskime Süresi" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Süresi Dolmuş Stoktan Üretim" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "Süresi dolmuş stok ile üretime izin ver" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Stok Sahipliği Kontrolü" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "Stok konumu ve kalemleri üzerinde sahiplik kontrolünü etkinleştir" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Varsayılan Stok Konumu Simgesi" -#: common/setting/system.py:759 +#: common/setting/system.py:751 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:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Takılı Stok Kalemlerini Göster" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "Stok tablolarında takılı stok kalemlerini görüntüle" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "Kalemlerin kurulumunu yaparken BOM'u kontrol et" -#: common/setting/system.py:772 +#: common/setting/system.py:764 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:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "Stok Dışı Aktarıma İzin Ver" -#: common/setting/system.py:780 +#: common/setting/system.py:772 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:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Üretim Emri Referans Şablonu" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "Üretim emri referans alanını üretmek için gerekli şablon" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "Sorumlu Sahip Gerektir" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "Her siparişe sorumlu bir yetkili atanmalıdır." -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "Aktif Parça Gerektirir" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "Pasif parçalarla üretim emri oluşturmayı engelle" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "Kilitli Parça Gerekli" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "Kilidi açılmış parçalarla üretim emri oluşturmayı engelle" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "Geçerli BOM gereklidir." -#: common/setting/system.py:811 +#: common/setting/system.py:803 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:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "Kapalı Alt Siparişler Gerekli" -#: common/setting/system.py:818 +#: common/setting/system.py:810 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:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "Harici Üretim Emirleri" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "Harici üretim emri işlevselliğini etkinleştir" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "Testler Geçene Kadar Engelle" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "Gönderildi olarak işaretli satış siparişleri \"gönderildi\" durumu atlanarak otomatik olarak tamamlanacaktır" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Satın Alma Siparişi Referans Şablonu" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Tamamlanan Satın Alma Siparişlerini Düzenle" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "Para Birimini Dönüştür" -#: common/setting/system.py:931 +#: common/setting/system.py:939 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:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Satın Alma Siparişlerini Otomatik Tamamla" -#: common/setting/system.py:938 +#: common/setting/system.py:946 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:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Şifremi unuttum seçeneğini etkinleştir" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "Giriş yapma sayfasında şifremi unuttum işlevini etkinleştir" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Kayıt olmayı etkinleştir" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "SSO Etkinleştir" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Kullanıcı girişi sayfalarında SSO etkinleştir" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "SSO ile kayıt olmayı etkinleştir" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "SSO grup eşitlemeyi etkinleştir" -#: common/setting/system.py:973 +#: common/setting/system.py:981 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:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSO grup anahtarı" -#: common/setting/system.py:980 +#: common/setting/system.py:988 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:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "SSO grup haritası" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "SSO dışındaki grupları kaldır" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "E-posta Gerekir" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 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:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "SSO kullanıcıları otomatik doldur" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Postayı iki kez gir" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Şifreyi iki kez gir" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Alanlara izin ver" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Hesap oluştururken grup" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "ÇFKD'yi Zorunlu Kıl" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "Kullanıcıların çok faktörlü kimlik doğrulamasını kullanması gerekmektedir." -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 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:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Başlangıçta eklentileri kontrol et" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Eklenti güncellemelerini kontrol et" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 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:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "URL entegrasyonunu etkinleştir" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "URL yönlendirmesi eklemek için eklentileri etkinleştir" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Gezinti entegrasyonunu etkinleştir" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "Eklentilerin gezintiye entegre edilmesini etkinleştir" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Uygulama entegrasyonunu etkinleştir" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Uygulamalar eklemek için eklentileri etkinleştir" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Zamanlama entegrasyonunu etkinleştir" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "Zamanlanmış görevleri çalıştırmak için eklentileri etkinleştir" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Olay entegrasyonunu etkinleştir" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "Eklentilerin olaylara yanıt verebilmesini etkinleştirin" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "Arayüz entegrasyonunu etkinleştir" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 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:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "Posta entegrasyonunu etkinleştir" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "Eklentilerin giden/gelen postaları işlemesini etkinleştir" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "Proje kodlarını etkinleştir" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "Projeleri izlemek için proje kodlarını etkinleştir" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "Stok Sayımını Etkinleştir" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 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:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Harici Konumları Hariç Tut" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "Harici konumlardaki stok kalemlerini stok geçmişi hesaplamalarının dışında tut" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Otomatik Stok Sayımı Periyodu" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "Otomatik stok geçmişi kaydı arasındaki gün sayısı" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "Eski Stok Geçmişi Girdilerini Sil" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "Belirtilen gün sayısından daha eski stok geçmişi girdilerini sil" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "Stok Geçmişi Silme Aralığı" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 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:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "Eski Stok Geçmişi Girdilerini Sil" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "Belirtilen gün sayısından daha eski stok geçmişi girdilerini sil" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "Stok Geçmişi Silme Aralığı" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 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:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Kullancıların tam isimlerini görüntüle" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 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:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "Kullanıcı Profillerini Göster" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "Kullanıcıların Profillerini kendi profil sayfalarında göster" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "Test İstasyon Verisini Etkinleştir" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 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:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "Makine Pingini Etkinleştir" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 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" @@ -3951,6 +4008,14 @@ msgstr "Son kullanılan yazdırma makineleri" msgid "Save the last used printing machines for a user" msgstr "Son kullanılan yazdırma makinelerini bir kullanıcı için kaydet" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "Tüm modeller" @@ -4012,8 +4077,8 @@ msgstr "Dahili Parça Aktif" msgid "Supplier is Active" msgstr "Tedarikçi Aktif" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Üretici" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "İletişim e-posta adresi" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "İletişim" @@ -4111,7 +4176,7 @@ msgstr "Vergi Numarası" msgid "Company Tax ID" msgstr "Şirket Vergi Numarası" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Adres" @@ -4203,12 +4268,12 @@ msgstr "Dahili kullanım için sevkiyat notları" msgid "Link to address information (external)" msgstr "Adres bilgisine bağlantı (harici)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Üretici Parçası" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Temel Parça" @@ -4221,8 +4286,8 @@ msgstr "Parça seçin" msgid "Select manufacturer" msgstr "Üretici seçin" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "ÜPN" @@ -4250,8 +4315,8 @@ msgstr "Paket birimleri sıfırdan büyük olmalıdır" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Tedarikçi" msgid "Select supplier" msgstr "Tedarikçi seçin" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Tedarikçi stok kodu" @@ -4290,15 +4355,15 @@ msgstr "Harici tedarikçi parçası bağlantısı için URL" msgid "Supplier part description" msgstr "Tedarikçi parçası açıklaması" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "temel maliyet" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Minimum ücret (örneğin stoklama ücreti)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Paketleme" @@ -4315,7 +4380,7 @@ msgstr "Paket Miktarı" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "çoklu" @@ -4339,23 +4404,23 @@ msgstr "Temin edilebilirlik verisinin güncellendiği son tarih" msgid "Supplier Price Break" msgstr "Tedarikçi Fiyat Kademesi" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Bu tedarikçi için kullanılan varsayılan para birimi" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "Şirket Adı" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Stokta" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "Fiyat Kademeleri" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "Orijinal satır verisi" msgid "Errors" msgstr "Hatalar" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Geçerli" @@ -4623,7 +4688,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:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Bilinmeyen" @@ -4727,7 +4792,7 @@ msgstr "Özelliğin anahtarı" msgid "Value of the property" msgstr "Özelliğin değeri" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Grup" @@ -4751,117 +4816,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:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Sipariş Referansı" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "Açık" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "Proje Kodu Var" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Oluşturan" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "Öncesinde Oluşturuldu" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "Sonrasında Oluşturuldu" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "Başlangıç Tarihi Var" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "Öncesi Başlangıç Tarihi" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "Sonrası Başlangıç Tarihi" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "Hedef Tarihi Var" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "Öncesi Hedef Tarih" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "Sonrası Hedef Tarih" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "Daha önce güncellendi" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "Güncellendi (den sonra)" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "Fiyatlandırılmış" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "Öncesinde Tamamlandı" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "Sonrasında Tamamlandı" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "Harici Üretim Emri" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Sipariş" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "Sipariş Tamamlandı" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Dahili Parça" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "Sipariş Bekliyor" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Tamamlandı" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "Sevkiyatı Var" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Satın Alma Siparişi" msgid "Sales Order" msgstr "Satış Siparişi" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "Toplam Fiyat" msgid "Total price for this order" msgstr "Bu sipariş için toplam fiyat" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Sipariş Para Birimi" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "Adres bilgileri seçilen şirketle eşleşmiyor" msgid "Order description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Bu sipariş için proje kodu seçin" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Harici sayfaya bağlantı" @@ -4930,7 +4995,7 @@ msgstr "Başlangıç ​​tarihi" msgid "Scheduled start date for this order" msgstr "Bu üretim emri için planlanan başlangıç tarihi" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Hedeflenen tarih" @@ -4963,12 +5028,12 @@ msgstr "Bu sipariş için ilgili kişi" msgid "Company address for this order" msgstr "Bu sipariş için şirket adresi" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Sipariş referansı" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Durum" @@ -4992,15 +5057,15 @@ msgstr "Tedarikçi siparişi referans kodu" msgid "received by" msgstr "teslim alan" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Siparişin tamamlandığı tarih" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Hedef" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "Teslim alınan kalemler için varış yeri" @@ -5024,616 +5089,624 @@ msgstr "Miktar pozitif bir sayı olmalıdır" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Müşteri" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "Ürünlerin satılmakta olduğu şirket" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "Satış siparişi durumu" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Müşteri Referansı " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Müşteri siparişi referans kodu" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Sevkiyat Tarihi" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "tarafından sevk edildi" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "Sipariş zaten tamamlandı" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "Sipariş zaten iptal edildi" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "Yalnızca açık siparişler tamamlandı olarak işaretlenebilir" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "Tamamlanmamış sevkiyatlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "Tamamlanmamış tahsisatlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "Tamamlanmamış satırlar olduğundan sipariş tamamlanamaz" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "Bu sipariş kilitli olduğundan değiştirilemez" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Kalem miktarı" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Satır referansı" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Satır notları" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Satır açıklaması (isteğe bağlı)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Bu satır için ek bağlam" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Birim Fiyat" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "Satın Alma Siparişi Kalemi" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "Tedarikçi parçası tedarikçi ile eşleşmelidir" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "Üretim emri harici olarak işaretlenmelidir" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "Üretim emirleri yalnızca montaj parçalarına bağlanabilir" -#: order/models.py:1957 +#: order/models.py:1977 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:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Tedarikçi parçası" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Teslim Alındı" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Teslim alınan miktar" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Alış Fiyatı" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Birim alış fiyatı" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "Bu kalem tarafından karşılanacak harici Üretim Emri" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "Ek Sipariş Kalemi" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "Satış Siparişi Kalemi" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Satış Fiyatı" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Birim satış fiyatı" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Sevk edildi" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Sevk edilen miktar" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "Satış Siparişi Sevkiyatı" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "Sevk adresi müşteri ile eşleşmelidir" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "Bu sevkiyatın sevk adresi" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Sevkiyat tarihi" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Teslimat Tarihi" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Sevkiyatın teslimat tarihi" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Kontrol Eden" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Bu sevkiyatı kontrol eden kullanıcılar" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Sevkiyat" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Sevkiyat numarası" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Takip Numarası" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Sevkiyat takip numarası" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Fatura Numarası" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Fatura referans numarası" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Sevkiyat zaten sevk edildi" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "Sevkiyatın tahsis edilen stok kalemleri bulunmuyor" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "Sevkiyat tamamlanmadan önce kontrol edilmelidir" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "Ek Sipariş Kalemi" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "Satış Siparişi Tahsisatı" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Stok kalemi henüz atanmadı" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "Parça içermeyen bir satıra stok tahsis edilemez" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "Tahsis miktarı stok miktarını aşamaz" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "Tahsis edilen miktar sıfırdan büyük olmalıdır" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "Seri numaralı stok kalemi için miktar 1 olmalıdır" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "Satış siparişi sevkiyatla eşleşmiyor" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "Sevkiyat satış siparişiyle eşleşmiyor" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "Satır" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Satış siparişinin sevkiyat referansı" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Kalem" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Tahsis edilecek stok kalemini seçin" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Stok tahsis miktarını girin" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "İade Siparişi referansı" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "Ürünlerin iade edildiği şirket" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "İade siparişi durumu" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "İade Siparişi Satırı" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "Stok kalemi belirtilmelidir" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "İade miktarı stok miktarını aşıyor" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "İade miktarı sıfırdan büyük olmalıdır" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "Seri numaralı stok kalemi için geçersiz miktar" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "Müşteriden iade edilecek ürünü seçin" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Teslim Alma Tarihi" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "Bu iade kaleminin teslim alındığı tarih" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Sonuç" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Bu satırın sonucu" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "Ek Sipariş Kalemi" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "Sipariş ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "Kopyası oluşturulacak siparişin ID'si" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "Satırları Kopyala" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "Satırları orijinal siparişten kopyala" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "Ek Kalemleri Kopyala" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "Orijinal siparişten ek kalemleri kopyala" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Parametreleri Kopyala" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "Parametreleri orijinal siparişten kopyala" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "Tamamlanan Satırlar" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "Siparişin Kopyasını Oluştur" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "Bu siparişin kopyasını oluşturmak için seçenekleri belirtin" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "Geçersiz sipariş ID" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Tedarikçi Adı" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Sipariş iptal edilemez" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 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:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "Siparişin eksik satırları var" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Sipariş açık değil" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "Otomatik Fiyatlandırma" -#: order/serializers.py:678 +#: order/serializers.py:679 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:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Satın alma fiyatı para birimi" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "Kalemleri Birleştir" -#: order/serializers.py:728 +#: order/serializers.py:729 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:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "SKU" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Dahili Parça Numarası" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "Dahili Parça Adı" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Tedarikçi parçası belirtilmeli" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Satın alma siparişi belirtilmeli" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Tedarikçi satın alma siparişi ile eşleşmelidir" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Satın alma siparişi tedarikçi ile eşleşmelidir" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Satır" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Teslim alınan kalemler için varış konumunu seçin" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Gelen stok kalemleri için parti numarası girin" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Son Kullanma Tarihi" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "Gelen stok kalemleri için son kullanma tarihi girin" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Gelen stok kalemlerinin seri numaralarını girin" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "Gelen stok kalemlerinin paketleme bilgilerini geçersiz kıl" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "Gelen stok kalemleri için ek not" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Barkod" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Taranan barkod" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Barkod zaten kullanımda" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Satırlar sağlanmalıdır" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Hedef konum belirtilmelidir" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Sağlanan barkod değerleri benzersiz olmalıdır" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "Sevkiyatlar" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Tamamlanan Sevkiyatlar" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Satış para birimi" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "Tahsis Edilen Kalemler" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Sevkiyat bilgileri sağlanmadı" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "Ürün kalemi bu siparişle ilişkilendirilmemiştir" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Miktar pozitif olmalıdır" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Tahsis edilecek seri numaralarını girin" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Sevkiyat zaten sevk edildi" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "Sevkiyat bu sipariş ile ilişkilendirilmemiştir" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Şu seri numaraları için bir eşleşme bulunamadı" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "Şu seri numaraları mevcut değildir" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "İade siparişi kalemi" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "Ürün kalemi iade siparişi ile eşleşmiyor" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Ürün kalemi zaten teslim alındı" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "İade olacak miktar" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Satır para birimi" @@ -5756,59 +5829,63 @@ msgstr "Revizyon mu" msgid "Has Revisions" msgstr "Revizyonu Olanlar" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "BOM Geçerli" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "Kategorileri Kademele" -#: part/api.py:963 +#: part/api.py:980 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:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "Sayısal kategori ID veya 'null' sabitine göre filtrele" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "Montaj parçası etkin" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "Montaj parçası takip edilebilir" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "Montaj test edilebilir" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "Bileşen etkin" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "Bileşen takip edilebilir" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "Bileşen test edilebilir" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "Bileşen bir montaj parçası" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "Bileşen sanal" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "Stok mevcut" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "Kullanımlar" @@ -5821,7 +5898,7 @@ msgstr "Parça Kategorisi" msgid "Part Categories" msgstr "Parça Kategorileri" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Varsayılan Konum" @@ -5849,7 +5926,7 @@ msgstr "Bu kategoridaki parçalar için varsayılan anahtar kelimeler" msgid "Icon" msgstr "Simge" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Simge (isteğe bağlı)" @@ -5870,984 +5947,1012 @@ msgstr "Varsayılan Değer" msgid "Default Parameter Value" msgstr "Varsayılan Parametre Değeri" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Parçalar" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "Kilitli bir parçanın parametreleri silinemez" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "Kilitli bir parçanın parametreleri değiştirilemez" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Bu parça kilitli olduğu için silinemez" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Bu parça hala aktif olduğundan silinemez" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Bu parça bir montajda kullanıldığından silinemez" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "'{self}' parçası, '{parent}' için BOM'da kullanılamaz (yinelemeli)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "'{parent}' parçası, '{self}' için BOM'da kullanılır (yinelemeli)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN, düzenli ifade kalıbı {pattern} ile eşleşmelidir" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "Parça, kendisinin revizyonu olamaz" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "Revizyonlara yalnızca montaj parçaları için izin verilir" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "Bir şablon parçanın revizyonu yapılamaz" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "Üst parça aynı şablonu göstermelidir" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "Bu seri numarasına sahip stok kalemi zaten var" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "Yinelenen DPN'ye parça ayarlarında izin verilmiyor" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "Kopyası oluşturulan parça revizyonu zaten var." -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "Bu Ad, IPN ve Revizyona sahip parça zaten var." -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "Parçalar yapısal parça kategorilerine atanamaz!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Parça adı" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Şablon Mu" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Bu parça bir şablon parçası mı?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "Bu parça başka bir parçanın varyantı mı?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Şunun Varyantı" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Açıklama (isteğe bağlı)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Anahtar kelimeler" -#: part/models.py:1133 +#: part/models.py:1134 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:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Parça kategorisi" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "DPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "Parça revizyon veya versiyon numarası" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Revizyon" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "Bu parça başka bir parçanın revizyonu mu?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Şunun Revizyonu" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Bu kalem normalde nerede depolanır?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Varsayılan Son Kullanma" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Minimum Stok" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "İzin verilen minimum stok düzeyi" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Bu parça için ölçü birimleri" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Bu parça diğer parçalardan üretilebilir mi?" -#: part/models.py:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 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:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "Bu parçanın test sonuçları kaydedilebilir mi?" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "Bu parça dış tedarikçilerden satın alınabilir mi?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "Bu parça müşterilere satılabilir mi?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Bu parça aktif mi?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "Kilitli parçalar değiştirilemez" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "BOM Doğrulandı" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "Bu parçanın BOM'u geçerli mi?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "BOM sağlama toplamı" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Saklanan BOM sağlama toplamı" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "BOM'u kontrol eden" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "BOM kontrol tarihi" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Oluşturan Kullanıcı" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "Bu parçanın sorumlu sahibi" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Birden fazla sat" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "Fiyat hesaplamalarını önbelleğe almak için kullanılan para birimi" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Minimum BOM Maliyeti" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Bileşenlerin minimum maliyeti" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Maksimum BOM Maliyeti" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Bileşenlerin maksimum maliyeti" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Minimum Satın Alma Maliyeti" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Minimum tarihsel satın alma maliyeti" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Maksimum Satın Alma Maliyeti" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "Maksimum tarihsel satın alma maliyeti" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Minimum Dahili Fiyat" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı minimum maliyet" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Maksimum Dahili Fiyat" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "Dahili fiyat kademelerine dayalı maksimum maliyet" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Minimum Tedarikçi Fiyatı" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "Parça için minimum dış tedarikçi fiyatı" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Maksimum Tedarikçi Fiyatı" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "Parça için maksimum dış tedarikçi fiyatı" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Minimum Varyant Maliyeti" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "Varyant parçaların hesaplanan minimum maliyeti" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Maksimum Varyant Maliyeti" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "Varyant parçaların hesaplanan maksimum maliyeti" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Minimum Maliyet" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Minimum maliyeti geçersiz kıl" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Maksimum Maliyet" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Maksimum maliyeti geçersiz kıl" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Hesaplanan genel minimum maliyet" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Hesaplanan genel maksimum maliyet" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Minimum Satış Fiyatı" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı minimum satış fiyatı" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Maksimum Satış Fiyatı" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Fiyat kademelerine dayalı maksimum satış fiyatı" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Minimum Satış Maliyeti" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Minimum tarihsel satış fiyatı" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Maksimum Satış Maliyeti" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Maksimum tarihsel satış fiyatı" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Stok sayımı için parça" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Kalem Sayısı" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "Sayım anındaki tekil stok kaydı sayısı" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "Sayım anındaki toplam mevcut stok" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Tarih" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Stok sayımının yapıldığı tarih" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Minimum Stok Maliyeti" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "Mevcut stokun tahmini minimum maliyeti" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Maksimum Stok Maliyeti" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "Mevcut stokun tahmini maksimum maliyeti" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "Parça Satış Fiyat Kademesi" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "Parça Test Şablonu" -#: part/models.py:3655 +#: part/models.py:3665 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:3687 +#: part/models.py:3697 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:3701 +#: part/models.py:3711 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:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Test Adı" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Test için bir ad girin" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "Test Anahtarı" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "Test için basitleştirilmiş anahtar" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Test Açıklaması" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Bu test için açıklama girin" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "Bu test etkinleştirildi mi?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Gerekli" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Testi geçmesi için bu gerekli mi?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Değer Gerektirir" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Ek Gerektirir" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 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:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "Miktar sıfır veya daha büyük olmalıdır" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "BOM kalemi değiştirilemez - montaj kilitlidir" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "BOM kalemi değiştirilemez - varyant montajı kilitlidir" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Üst parçayı seçin" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Alt parça" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "BOM'da kullanılacak parçayı seçin" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Bu BOM kalemi için BOM miktarı" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Bu BOM kalemi isteğe bağlıdır" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "Hazırlık Payı" -#: part/models.py:4021 +#: part/models.py:4091 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:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "Fire" -#: part/models.py:4031 +#: part/models.py:4101 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:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "Kat Yuvarlama" -#: part/models.py:4044 +#: part/models.py:4114 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:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "BOM kalemi referansı" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "BOM kalemi notları" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Sağlama Toplamı" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "BOM satırı sağlama toplamı" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Doğrulandı" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Bu BOM kalemi doğrulandı" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Devralınır" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "İzlenebilir parçalar için miktar tamsayı olmalıdır" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Alt parça belirtilmelidir" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "BOM Kalemi Muadili" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Üst BOM kalemi" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Muadil parça" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Parça 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Parça 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "İlgili Parçayı Seçin" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "Bu ilişki için not" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Kopyalanan ilişki zaten mevcut" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "Üst Kategori" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "Üst parça kategorisi" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Alt kategoriler" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Sonuçlar" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "Bu şablon ile ilişkilendirilmiş sonuç sayısı" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "Bu stok kaleminin alış para birimi" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "Dosya bir görsel değil" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Orijinal Parça" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Kopyalanacak orijinal parçayı seçin" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Görseli Kopyala" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Orijinal parçadan görseli kopyala" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "BOM'u Kopyala" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "Orijinal parçadan ürün ağacını kopyala" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "Orijinal parçadan parametreleri kopyala" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Notları Kopyala" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Orijinal parçadan notları kopyala" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "Testleri Kopyala" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "Orijinal parçadan test şablonlarını kopyala" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Başlangıç Stok Miktarı" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Başlangıç Stok Konumu" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "Bu parça için başlangıç stok konumunu belirtin" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Tedarikçiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "Üreticiyi seçin (veya atlamak için boş bırakın)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Üretici parça numarası" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "Seçilen şirket geçerli bir tedarikçi değildir" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "Seçilen şirket geçerli bir üretici değildir" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "Bu MPN ile eşleşen üretici parçası zaten mevcut" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "Bu SKU ile tedarikçi parçası zaten mevcut" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Kategori Adı" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Üretiliyor" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "Bu parçanın şu anda üretimde olan miktarı" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "Bu parçanın üretilmesi planlanan açık miktarı" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Stok Kalemleri" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "Revizyonlar" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "Toplam Stok" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "Tahsis Edilmemiş Stok" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "Varyant Stoku" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Parçanın Kopyasını Oluştur" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "Başlangıç verisini diğer parçadan kopyala" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Başlangıç Stoku" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "Başlangıç stok miktarı ile parça oluştur" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Tedarikçi Bilgileri" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "Bu parça için ilk tedarikçi bilgilerini ekleyin" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Kategori Parametrelerini Kopyala" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "Seçilen parça kategorisinden parametre şablonlarını kopyala" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Mevcut Görsel" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "Mevcut parça görselinin dosya adı" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Görsel dosyası mevcut değil" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Tüm ürün ağacını doğrula" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Üretebilir Miktar" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "Üretim Emirleri için Gerekli" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "Üretim Emirlerine Tahsis Edildi" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "Satış Siparişleri için Gerekli" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "Satış Siparişlerine Tahsis Edildi" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "Parça DPN" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "Parça Açıklaması" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "Stok sayımı bilgisi oluşturmak üzere bir parça (ve varsa varyantlarını) seçin" -#: part/serializers.py:1348 +#: part/serializers.py:1337 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:1358 +#: part/serializers.py:1347 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:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "Stok Sayımı Kayıtları Oluşturun" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "Seçili parçalar için stok sayımı girdilerini kaydedin" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "Rapor Oluştur" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "Seçili parçalar için stok sayımı raporu oluşturun" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Minimum Fiyat" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Minimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Minimum fiyat para birimi" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Maksimum Fiyat" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Maksimum fiyat için hesaplanan değeri geçersiz kıl" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Maksimum fiyat para birimi" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Güncelle" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Bu parçanın fiyatlandırmasını güncelle" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "Minimum fiyat maksimum fiyattan yüksek olamaz" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "Maksimum fiyat minimum fiyattan düşük olamaz" -#: part/serializers.py:1716 -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:1689 +msgid "Amount required for this item (can include units)" +msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "Üst montajı seçin" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "Bileşeni seçin" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "BOM'u kopyalanacak parçayı seçin" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Mevcut Verileri Temizle" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "Kopyalamadan önce mevcut BOM kalemlerini temizle" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Devralınanı Dahil Et" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "Şablon parçalardan devralınan BOM kalemlerini dahil et" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Geçersiz Satırları Atla" -#: part/serializers.py:2012 +#: part/serializers.py:2010 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:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Muadil Parçaları Kopyala" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "BOM kalemlerinin kopyasını oluştururken muadil parçaları kopyala" @@ -7099,15 +7204,15 @@ msgstr "Tahsis edilecek miktar" msgid "Label printing failed" msgstr "Etiket yazdırılamadı" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "Etiket PDF olarak işlenirken hata oluştu" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "Etiket HTML olarak işlenirken hata oluştu" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "Yazdırılacak öge seçilmedi" @@ -7168,7 +7273,7 @@ msgstr "Barkodlar için yerleşik destek sağlar" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "Değişen parça bildirimi" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "`{part.name}` parçası, `{part_action}` olayı ile tetiklenmiştir" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF etiket yazıcı" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "PDF etiketleri yazdırmak için yerleşik destek sağlar" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Hata ayıklama modu" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Hata ayıklama modunu etkinleştir - PDF yerine ham HTML döndürür" @@ -7568,7 +7673,7 @@ msgstr "Kenarlık" msgid "Print a border around each label" msgstr "Her etiketin etrafına kenarlık ekle" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Yatay" @@ -8029,7 +8134,7 @@ msgstr "Eklenti, etiket yazdırmayı desteklemiyor" msgid "Invalid label dimensions" msgstr "Geçersiz etiket boyutları" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "Şablona geçerli öge sağlanmadı" @@ -8073,112 +8178,112 @@ msgstr "Yazdırmada Modele Ekle" msgid "Save report output as an attachment against linked model instance when printing" msgstr "Yazdırırken rapor çıktısını bağlantılı model örneğine ek olarak kaydet" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Dosya Adı Deseni" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "Dosya adları oluşturmak için desen" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "Şablon etkinleştirildi" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "Şablon için hedef model türü" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Filtreler" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "Şablon sorgu filtreleri (virgülle ayrılmış anahtar=değer çiftleri listesi)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "Şablon dosyası" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "PDF raporları için sayfa boyutu" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Raporu yatay yönde işle" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "Birleştir" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "Seçili ögeler için tek bir rapor oluştur" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "{self.name} şablonundan oluşturulan rapor" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "Şablon sözdizimi hatası" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "Rapor işleme hatası" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "Rapor oluşturma hatası" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "Rapor çıktılarını birleştirme hatası" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Genişlik [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Etiket genişliği mm olarak belirtilmeli" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Yükseklik [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Etiket yüksekliği mm olarak belirtilmeli" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "Etiket yazdırma hatası" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Parçacık" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Rapor parçacık dosyası" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Parçacık dosyası açıklaması" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Kaynak Dosyası" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Rapor kaynak dosyası" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Kaynak dosyası açıklaması" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Seri Numara" @@ -8538,7 +8643,7 @@ msgstr "Stok Konum Türleri" msgid "Default icon for all locations that have no icon set (optional)" msgstr "Simge atanmamış tüm konumlar için varsayılan simge (isteğe bağlı)" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Stok Konumu" @@ -8546,11 +8651,11 @@ msgstr "Stok Konumu" msgid "Stock Locations" msgstr "Stok Konumları" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Sahip" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Sahibi Seçin" @@ -8558,7 +8663,7 @@ msgstr "Sahibi Seçin" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." 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 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Harici" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "{field} mevcut değil" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "Parça belirtilmelidir" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "Stok kalemleri yapısal stok konumlarına yerleştirilemez!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "Sanal parçalar için stok kalemi oluşturulamaz" -#: stock/models.py:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "Seri numarası olan ögenin miktarı bir olmalı" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "Miktar birden büyük ise seri numarası ayarlanamaz" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Öge kendisine ait olamaz" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "Üretim referansı aynı parça nesnesini göstermiyor" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Üst Stok Kalemi" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Temel parça" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Bu stok kalemi nerede bulunur?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "Bu stok kaleminin ambalajı şu şekilde saklanmaktadır" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Şuna Takıldı" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "Bu öge başka bir ögeye takılı mı?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Bu öge için seri numarası" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Bu stok kalemine ait parti kodu" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Stok Miktarı" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Kaynak Üretim" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Bu stok kalemi için üretim kaydı" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Tüketen" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "Bu stok kaleminin kullanıldığı üretim emri" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Kaynak Satın Alma Emri" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Bu stok kalemi için satın alma emri" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Hedef satış siparişi" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "Stok kalemi için son kullanma tarihi. Bu tarihten sonra stok süresi dolmuş kabul edilir" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Tükendiğinde sil" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "Stok tükendiğinde bu stok kalemini sil" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "Satın alma anındaki birim alış fiyatı" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Parçaya dönüştürüldü" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "Miktar, mevcut stoğu aşıyor" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "Parça için izlenebilirlik etkin değil" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Miktar tam sayı olmalıdır" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "Miktar, mevcut stok miktarını ({self.quantity}) aşmamalıdır" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "Seri numaraları liste halinde girilmelidir" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Miktar seri numaları ile eşleşmiyor" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "Stok, yapısal bir konuma atanamaz" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "Test şablonu mevcut değil" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "Stok kalemi bir satış siparişine atanmıştır" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "Stok kalemi başka bir stok kalemine takılıdır" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Bu öge, başka ögeler de içeriyor" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "Stok kalemi stokta olmadığı için taşınamaz" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "Tedarikçi Parça Numarası" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "İzinleri ayarla" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Görünüm" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Parçayı görüntüleme izni" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Parça ekleme izni" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Değiştir" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Parçaları düzenleme izni" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Parçaları silme izni" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "Kullanıcının görünen adı" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "Konumu" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "Ana unvanı veya pozisyonu" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "Kullanıcı durum mesajı" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "Kullanıcı konum bilgisi" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "Kullanıcı, sistemi aktif kullanıyor" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "Kullanıcının tercih edilen iletişim bilgileri" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "Kullanıcı Türü" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "Bu, hangi tür kullanıcı?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "Organizasyon" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "Kullanıcının ana organizasyonu/ilişkisi" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "Birincil Grup" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "Kullanıcının birincil grubu" diff --git a/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/uk/LC_MESSAGES/django.po index caf2221c7d..6be6d0a2d2 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Ukrainian\n" "Language: uk_UA\n" @@ -89,6 +89,7 @@ msgstr "Не вдалося перетворити {original} на {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Невірна кількість" @@ -104,11 +105,11 @@ msgstr "Введіть дату" msgid "Invalid decimal value" msgstr "Неправильне десяткове значення" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Помилка підключення" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "Сервер відправив некоректний код статусу" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Відбулося виключення" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "Сервер повернув невірне значення Content-Length" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Розмір зображення занадто великий" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "Розмір зображення перевищує максимально дозволений розмір" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Віддалений сервер повернув пусту відповідь" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "" @@ -219,7 +220,7 @@ msgstr "Авторизуватися в додатку" msgid "Email" msgstr "Електронна пошта" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "Необхідно увімкнути двофакторну автентифікацію, перед тим як робити будь-що інше." @@ -263,124 +264,108 @@ msgstr "" msgid "Reference number is too large" msgstr "" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Назва" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Опис" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Опис (опціонально)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Шлях" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Примітки в Markdown (опціонально)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Помилка сервера" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ msgstr "" msgid "Not a valid currency code" msgstr "" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "" @@ -561,21 +546,21 @@ msgstr "" msgid "Parent Build" msgstr "" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Деталь" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "" @@ -605,7 +590,7 @@ msgstr "" msgid "Ancestor Build" msgstr "" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" msgid "Build must be cancelled before it can be deleted" msgstr "" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Розхідний матеріал" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Збірка" @@ -687,32 +672,32 @@ msgstr "Збірка" msgid "Tracked" msgstr "" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Тестуємо" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "" @@ -720,7 +705,7 @@ msgstr "" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Місце" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "" msgid "Build status code" msgstr "" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "" @@ -870,8 +855,8 @@ msgstr "" msgid "Batch code for this build output" msgstr "" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "" @@ -891,7 +876,7 @@ msgstr "" msgid "Target date for build completion. Build will be overdue after this date." msgstr "" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "" @@ -907,8 +892,8 @@ msgstr "" msgid "User who issued this build order" msgstr "" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "" @@ -917,12 +902,12 @@ msgstr "" msgid "User or group responsible for this build order" msgstr "" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "" @@ -934,8 +919,8 @@ msgstr "" msgid "Priority of this build order" msgstr "" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "" @@ -968,7 +953,7 @@ msgstr "" msgid "Serial numbers must be provided for trackable parts" msgstr "" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "" @@ -980,47 +965,47 @@ msgstr "" msgid "Build output does not match Build Order" msgstr "" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "" msgid "Quantity" msgstr "Кількість" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "" @@ -1099,7 +1084,7 @@ msgstr "" msgid "Build Level" msgstr "" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "" @@ -1135,7 +1120,7 @@ msgstr "" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "" @@ -1156,8 +1141,8 @@ msgstr "" msgid "Automatically allocate required items with matching serial numbers" msgstr "" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "" @@ -1245,7 +1230,7 @@ msgstr "" msgid "Required stock has not been fully allocated" msgstr "" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "" @@ -1293,7 +1278,7 @@ msgstr "" msgid "Item must be in stock" msgstr "" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "" @@ -1306,7 +1291,7 @@ msgstr "" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "" @@ -1404,7 +1389,7 @@ msgstr "" msgid "Part Category Name" msgstr "" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "" @@ -1412,29 +1397,29 @@ msgstr "" msgid "Inherited" msgstr "" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Дозволити варіанти" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "У виробництві" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "" @@ -1554,610 +1543,634 @@ msgstr "" msgid "Project Code Label" msgstr "" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Користувач" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Ціна" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Назва" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Посилання" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Коментар" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "Дата завантаження" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "Дата завантаження файлу" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "Розмір файлу" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "Розмір файлу в байтах" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "Етикетка" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "Колір" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "Модель" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "Список вибору" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "Заблоковано" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Прапорець" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Шаблон" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Дані" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "" msgid "Note" msgstr "Примітка" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,7 @@ msgstr "" msgid "A order that is assigned to you was canceled" msgstr "" -#: common/notifications.py:73 common/notifications.py:80 order/api.py:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "" @@ -2457,7 +2470,7 @@ msgstr "" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "" msgid "How often to update exchange rates (set to zero to disable)" msgstr "" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Компонент" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Доступний для продажу" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Віртуальний" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Показати пов'язані деталі" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 -msgid "Purchase Order Reference Pattern" +msgid "Block Incomplete Item Tests" msgstr "" #: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 +msgid "Purchase Order Reference Pattern" +msgstr "" + +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "Внутрішня позиція активна" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Виробник" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "" @@ -4203,12 +4268,12 @@ msgstr "" msgid "Link to address information (external)" msgstr "" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Позиція виробника" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Базова позиція" @@ -4221,8 +4286,8 @@ msgstr "Обрати позицію" msgid "Select manufacturer" msgstr "" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "" msgid "Linked manufacturer part must reference the same base part" msgstr "" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "" msgid "Select supplier" msgstr "" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "" @@ -4290,15 +4355,15 @@ msgstr "" msgid "Supplier part description" msgstr "" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "Базова вартість" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Мінімальний платіж (напр. комісія за збереження)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "" @@ -4315,7 +4380,7 @@ msgstr "" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "" @@ -4339,23 +4404,23 @@ msgstr "" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "В наявності" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Дійсно" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Внутрішній компонент" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "" msgid "Sales Order" msgstr "" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "" msgid "Total price for this order" msgstr "" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "" @@ -4963,12 +5028,12 @@ msgstr "" msgid "Company address for this order" msgstr "" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "" @@ -4992,15 +5057,15 @@ msgstr "" msgid "received by" msgstr "" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "" -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,7 @@ msgstr "" msgid "Part Categories" msgstr "" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "" @@ -5849,7 +5926,7 @@ msgstr "" msgid "Icon" msgstr "" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "" @@ -5870,984 +5947,1012 @@ msgstr "" msgid "Default Parameter Value" msgstr "" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Позиції" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "Неможливо видалити цю позицію, оскільки вона заблокована" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "Неможливо видалити цю позицію, оскільки вона ще активна" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "Неможливо видалити цю позицію, бо вона використовується у збірці" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Назва позиції" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Це шаблон" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "Ця позиція є шаблоном?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Опис позиції (опціонально)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Ревізія" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "Ревізія" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Мінімальний запас" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Мінімально дозволений рівень запасів" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Одиниці виміру для цієї позиції" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "Чи можна побудувати цю позицію з інших компонентів?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Дата" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Тестова назва" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Позиція 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Позиція 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "Результати" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Виробничий номер позиції" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Початковий запас" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Наявне зображення" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Мінімальна ціна" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Максимальна ціна" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "" @@ -7099,15 +7204,15 @@ msgstr "" msgid "Label printing failed" msgstr "" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "" @@ -7568,7 +7673,7 @@ msgstr "" msgid "Print a border around each label" msgstr "" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "" @@ -8538,7 +8643,7 @@ msgstr "" msgid "Default icon for all locations that have no icon set (optional)" msgstr "" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "" @@ -8546,11 +8651,11 @@ msgstr "" msgid "Stock Locations" msgstr "" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "" @@ -8558,7 +8663,7 @@ msgstr "" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "" @@ -8578,274 +8683,282 @@ msgstr "" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "" msgid "Supplier Part Number" msgstr "" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "" @@ -9466,131 +9579,131 @@ msgstr "" msgid "Revoked" msgstr "" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" diff --git a/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po b/src/backend/InvenTree/locale/vi/LC_MESSAGES/django.po index 449dc7a970..70077038b0 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:10\n" "Last-Translator: \n" "Language-Team: Vietnamese\n" "Language: vi_VN\n" @@ -89,6 +89,7 @@ msgstr "Không thể chuyển đổi {original} sang {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "Số lượng cung cấp không hợp lệ" @@ -104,11 +105,11 @@ msgstr "Nhập ngày" msgid "Invalid decimal value" msgstr "" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "" msgid "URL points to a private or reserved IP address" msgstr "" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "Lỗi kết nối" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 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:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "Xảy ra Exception" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 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:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "Hình ảnh quá lớn" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 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:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "Máy chủ trả về phản hồi trống" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 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ệ" @@ -219,7 +220,7 @@ msgstr "" msgid "Email" msgstr "Email" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "" @@ -263,124 +264,108 @@ msgstr "Tham chiếu phải phù hợp với mẫu yêu cầu" msgid "Reference number is too large" msgstr "Số tham chiếu quá lớn" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "Lựa chọn sai" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "Tên" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "Mô tả" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "Mô tả (tùy chọn)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "Đường dẫn" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "Tên trùng lặp không thể tồn tại trong cùng cấp thư mục" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Ghi chú markdown (không bắt buộc)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "Dữ liệu mã vạch" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "Dữ liệu mã vạch của bên thứ ba" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "Dữ liệu băm mã vạch" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "Chuỗi băm duy nhất của dữ liệu mã vạch" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "Mã vạch đã tồn tại" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "Lỗi máy chủ" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "Lỗi đã được ghi lại bởi máy chủ." -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "Phải là một số hợp lệ" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "Tiền tệ" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "Chọn tiền tệ trong các tùy chọn đang có" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "Giá trị không hợp lệ" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "Hình ảnh từ xa" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "URL của tệp hình ảnh bên ngoài" - -#: InvenTree/serializers.py:818 -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:825 -msgid "Failed to download image from remote URL" -msgstr "" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "" @@ -552,8 +537,8 @@ 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:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "Trạng thái đặt hàng" @@ -561,21 +546,21 @@ msgstr "Trạng thái đặt hàng" msgid "Parent Build" msgstr "Phiên bản cha" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "" msgid "Part" msgstr "Nguyên liệu" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "Danh mục" @@ -605,7 +590,7 @@ msgstr "Danh mục" msgid "Ancestor Build" msgstr "Xây dựng nguồn gốc" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "Đã gán cho tôi" @@ -653,11 +638,11 @@ msgstr "" msgid "Completed after" msgstr "" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "" @@ -669,16 +654,16 @@ msgstr "" 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:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "Vật tư tiêu hao" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "Tuỳ chọn" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "Lắp ráp" @@ -687,32 +672,32 @@ msgstr "Lắp ráp" msgid "Tracked" msgstr "Đã theo dõi" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "Có thể kiểm tra" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "Đã cấp phát" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "Đã dùng" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "Bật đơn hàng" @@ -720,7 +705,7 @@ msgstr "Bật đơn hàng" msgid "Build not found" msgstr "" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "Tạo đơn hàng" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "Địa điểm" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "Tham chiếu đơn đặt bản dựng" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "Trnạg thái bản dựng" msgid "Build status code" msgstr "Mã trạng thái bản dựng" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "Mã lô hàng" @@ -870,8 +855,8 @@ msgstr "Mã lô hàng" msgid "Batch code for this build output" msgstr "Mã lô cho đầu ra bản dựng này" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "Ngày tạo" @@ -891,7 +876,7 @@ msgstr "Ngày hoàn thành mục tiêu" 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:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "Ngày hoàn thành" @@ -907,8 +892,8 @@ msgstr "Cấp bởi" 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:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "Chịu trách nhiệm" @@ -917,12 +902,12 @@ msgstr "Chịu trách nhiệm" 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:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "Liên kết bên ngoài" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "Liên kết đến URL bên ngoài" @@ -934,8 +919,8 @@ msgstr "Độ ưu tiên" msgid "Priority of this build order" msgstr "Độ quan trọng của đơn đặt bản dựng" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "Mã dự án" @@ -968,7 +953,7 @@ msgstr "Một đơn đặt bản dựng đã được hoàn thành" 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:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "Không có đầu ra bản dựng đã được chỉ ra" @@ -980,47 +965,47 @@ msgstr "Đầu ra bản dựng đã được hoàn thiện" 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:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "Số lượng phải lớn hơn 0" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 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:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, 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:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "Tạo mục đơn hàng" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "Dựng đối tượng" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "Dựng đối tượng" msgid "Quantity" msgstr "Số lượng" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "Yêu cầu số lượng để dựng đơn đặt" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "" -#: build/models.py:1896 +#: build/models.py:1898 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:1959 +#: build/models.py:1961 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:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "Số lượng phải là 1 cho kho sê ri" -#: build/models.py:1994 +#: build/models.py:1996 #, 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:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "Kho hàng đã bị phân bổ quá đà" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "Kho hàng" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "Kho hàng gốc" -#: build/models.py:2111 +#: build/models.py:2113 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:2120 +#: build/models.py:2122 msgid "Install into" msgstr "Cài đặt vào" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "Kho hàng đích" @@ -1099,7 +1084,7 @@ msgstr "Kho hàng đích" msgid "Build Level" msgstr "Tạo cấp" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "Tên sản phẩm" @@ -1135,7 +1120,7 @@ msgstr "Số lượng nguyên dương cần phải điền cho sản phẩm có 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:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "Số sê-ri" @@ -1156,8 +1141,8 @@ msgstr "Số sêri tự cấp" 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:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 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ệ" @@ -1245,7 +1230,7 @@ msgstr "Chấp nhận hàng hóa không được phân bổ đầy đủ vào đ 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:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "Chấp nhận không hoàn thành" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part phải trỏ đến phần tương tự của đơn đặt msgid "Item must be in stock" msgstr "Hàng hóa phải trong kho" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "Số lượng có sẵn ({q}) đã bị vượt quá" @@ -1306,7 +1291,7 @@ msgstr "Đầu ra bản dựng phải được xác định cho việc phân s 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:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "Hàng hóa phân bổ phải được cung cấp" @@ -1386,9 +1371,9 @@ msgstr "" msgid "Build" msgstr "" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "Sản phẩm nhà cung cấp" @@ -1404,7 +1389,7 @@ msgstr "Tạo liên quan" msgid "Part Category Name" msgstr "Tên danh mục hàng hoá" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "Có thể theo dõi" @@ -1412,29 +1397,29 @@ msgstr "Có thể theo dõi" msgid "Inherited" msgstr "Được kế thừa" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "Cho phép biến thể" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "Mục BOM" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "Đang sản xuất" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "Kho ngoài" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "Số hàng tồn" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "Không có quyền xoá file đính kèm" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "Không có quyền xoá file đính kèm" @@ -1554,610 +1543,634 @@ msgstr "Không phần mở rộng" msgid "Project Code Label" msgstr "Nhãn mã dự án" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "Đã cập nhật" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 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:144 +#: common/models.py:146 msgid "Update By" msgstr "" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "Mã dự án duy nhất" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "Mô tả dự án" -#: common/models.py:188 +#: common/models.py:190 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:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "Giá trị cài đặt" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "Giá trị đã chọn không hợp lệ" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "Giá trị phải là kiểu boolean" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "Giá trị phải là một số nguyên dương" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "Chuỗi khóa phải duy nhất" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "Người dùng" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "Số lượng giá phá vỡ" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "Giá" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "Đơn vị giá theo số lượng cụ thể" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "Đầu mối" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "Đầu mối tại điểm webhook được nhận" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "Tên của webhook này" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "Hoạt động" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "Webhook có hoạt động không" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "Chữ ký số" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "Chữ ký số để truy cập" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "Bí mật" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "Mã bí mật dùng chung cho HMAC" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "Mã Tin nhắn" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "Định danh duy nhất cho tin nhắn này" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "Máy chủ" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "Mãy chủ từ tin nhắn này đã được nhận" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "Đầu mục" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "Đầu mục tin nhắn" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "Thân" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "Thân tin nhắn này" -#: common/models.py:1614 +#: common/models.py:1619 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:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "Làm việc vào" -#: common/models.py:1620 +#: common/models.py:1625 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:1746 +#: common/models.py:1751 msgid "Id" msgstr "Mã" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "Tiêu đề" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "Liên kết" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "Đã công bố" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "Tác giả" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "Tóm tắt" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "Đọc" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "Tin này đã được đọc?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "Tệp ảnh" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "" -#: common/models.py:1847 +#: common/models.py:1852 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:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "Tên đơn vị" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "Biểu tượng" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "Biểu tượng đơn vị tùy chọn" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "Định nghĩa" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "Định nghĩa đơn vị" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "Đính kèm" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "Tập tin bị thiếu" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "Thiếu liên kết bên ngoài" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "Chọn file đính kèm" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "Bình luận" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "Giá trị" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "Đã tạo" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "Cập nhật lần cuối" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "Mẫu tham số" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "Tham số hộp kiểm tra không thể có đơn vị" -#: common/models.py:2484 +#: common/models.py:2559 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:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "Lựa chọn phải duy nhất" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "Tên tham số mẫu phải là duy nhất" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "Tên tham số" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "Đơn vị" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "Đơn vị vật lý cho tham số này" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "Mô tả tham số" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "Ô lựa chọn" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "Tham số này có phải là hộp kiểm tra?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "Lựa chọn" -#: common/models.py:2577 +#: common/models.py:2652 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:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "Đã bật" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "Lựa chọn sai cho giá trị tham số" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "Mẫu" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "Dữ liệu" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "Giá trị tham số" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "Giá trị tham số" msgid "Note" msgstr "Ghi chú" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "Trường ghi chú tùy chọn" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "Ngữ cảnh" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "Kết quả" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "" -#: common/models.py:2996 +#: common/models.py:3071 msgid "INVE-E8: Email log deletion is protected. Set INVENTREE_PROTECT_EMAIL_LOG to False to allow deletion." msgstr "" -#: common/models.py:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 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:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "Mục đã nhận" @@ -2457,7 +2470,7 @@ msgstr "Tên tập tin" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "" @@ -2601,13 +2614,13 @@ msgstr "Tần suất cập nhật tiền tệ" 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:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "ngày" @@ -2620,637 +2633,637 @@ 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:290 -msgid "Download from URL" -msgstr "Tải về từ URL" - -#: common/setting/system.py:291 -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:296 -msgid "Download Size Limit" -msgstr "Giới hạn kích thước tải xuống" - -#: common/setting/system.py:297 -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:303 -msgid "User-agent used to download from URL" -msgstr "User-agent được dùng để tải xuống theo URL" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "Thời gian kiểm tra bản cập nhật" -#: common/setting/system.py:317 +#: common/setting/system.py:297 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:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "Sao lưu tự động" -#: common/setting/system.py:324 +#: common/setting/system.py:304 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:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "Khoảng thời gian sao lưu tự động" -#: common/setting/system.py:330 +#: common/setting/system.py:310 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:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "Khoảng thời gian xóa tác vụ" -#: common/setting/system.py:338 +#: common/setting/system.py:318 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:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "Khoảng thời gian xóa nhật ký lỗi" -#: common/setting/system.py:346 +#: common/setting/system.py:326 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:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "Khoảng thời gian xóa thông báo" -#: common/setting/system.py:354 +#: common/setting/system.py:334 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:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "Hỗ trợ mã vạch" -#: common/setting/system.py:377 +#: common/setting/system.py:357 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:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "Độ trễ quét mã vạch" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "Thời gian trễ xử lý đầu đọc mã vạch" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "Hỗ trợ mã vạch qua webcam" -#: common/setting/system.py:402 +#: common/setting/system.py:382 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:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "Phiên bản Sản phẩm" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "Bật trường phiên bản cho sản phẩm" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "Mẫu IPN" -#: common/setting/system.py:438 +#: common/setting/system.py:418 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:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "Cho phép trùng IPN" -#: common/setting/system.py:442 +#: common/setting/system.py:422 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:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "Cho phép sửa IPN" -#: common/setting/system.py:448 +#: common/setting/system.py:428 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:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "Sao chép dữ liệu BOM của sản phẩm" -#: common/setting/system.py:454 +#: common/setting/system.py:434 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:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "Sao chép dữ liệu tham số sản phẩm" -#: common/setting/system.py:460 +#: common/setting/system.py:440 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:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "Chép thông tin kiểm thử sản phẩm" -#: common/setting/system.py:466 +#: common/setting/system.py:446 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:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "Sao chéo mẫu tham số danh mục" -#: common/setting/system.py:472 +#: common/setting/system.py:452 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:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "Sản phẩm là mẫu bởi mặc định" -#: common/setting/system.py:484 +#: common/setting/system.py:464 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:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "Thành phần" -#: common/setting/system.py:490 +#: common/setting/system.py:470 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:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "Có thể mua" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "Sản phẩm mặc định có thể mua được" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "Có thể bán" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "Sản phẩm mặc định có thể bán được" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "Sản phẩm mặc định có thể theo dõi được" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "Ảo" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "Sản phẩm mặc định là số hóa" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "Hiển thị sản phẩm liên quan" -#: common/setting/system.py:520 +#: common/setting/system.py:500 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:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "Số liệu tồn kho ban đầu" -#: common/setting/system.py:526 +#: common/setting/system.py:506 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:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "Dữ liệu nhà cung cấp ban đầu" -#: common/setting/system.py:533 +#: common/setting/system.py:513 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:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "Định dạng tên sản phẩm hiển thị" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "Định dạng để hiển thị tên sản phẩm" -#: common/setting/system.py:546 +#: common/setting/system.py:526 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:547 +#: common/setting/system.py:527 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:552 +#: common/setting/system.py:532 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:554 +#: common/setting/system.py:534 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:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "Vị trí phần thập phân giá bán tối đa" -#: common/setting/system.py:567 +#: common/setting/system.py:547 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:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "Sử dụng giá bán nhà cung cấp" -#: common/setting/system.py:580 +#: common/setting/system.py:560 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:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "Ghi đè lịch sử mua hàng" -#: common/setting/system.py:588 +#: common/setting/system.py:568 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:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "Sử dụng giá hàng hóa trong kho" -#: common/setting/system.py:596 +#: common/setting/system.py:576 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:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "Tuổi giá kho hàng" -#: common/setting/system.py:604 +#: common/setting/system.py:584 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:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "Sử dụng giá biến thể" -#: common/setting/system.py:612 +#: common/setting/system.py:592 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:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "Chỉ các biến thể hoạt động" -#: common/setting/system.py:619 +#: common/setting/system.py:599 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:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "Tần suất tạo lại giá" -#: common/setting/system.py:634 +#: common/setting/system.py:614 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:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "Giá nội bộ" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "Bật giá nội bộ cho sản phẩm" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "Ghi đè giá nội bộ" -#: common/setting/system.py:648 +#: common/setting/system.py:628 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:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "Bật in tem nhãn" -#: common/setting/system.py:663 +#: common/setting/system.py:643 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:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "DPI hỉnh ảnh tem nhãn" -#: common/setting/system.py:670 +#: common/setting/system.py:650 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:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "Bật báo cáo" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "Cho phép tạo báo cáo" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "Chế độ gỡ lỗi" -#: common/setting/system.py:683 +#: common/setting/system.py:663 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:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "Khổ giấy" -#: common/setting/system.py:695 +#: common/setting/system.py:675 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:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "Bắt buộc đơn vị tham số" -#: common/setting/system.py:702 +#: common/setting/system.py:682 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:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "Sê ri toàn cục duy nhất" -#: common/setting/system.py:709 +#: common/setting/system.py:689 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:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "Xóa kho đã hết hàng" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "Mẫu sinh mã theo lô" -#: common/setting/system.py:721 +#: common/setting/system.py:713 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:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "Quá hạn trong kho" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "Bật chức năng quá hạn tồn kho" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "Bán kho quá hạn" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "Cho phép bán hàng kho quá hạn" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "Thời gian hàng cũ trong kho" -#: common/setting/system.py:739 +#: common/setting/system.py:731 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:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "Dựng kho quá hạn" -#: common/setting/system.py:747 +#: common/setting/system.py:739 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:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "Kiểm soát sở hữu kho" -#: common/setting/system.py:753 +#: common/setting/system.py:745 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:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "Biểu tượng địa điểm kho mặc định" -#: common/setting/system.py:759 +#: common/setting/system.py:751 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:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "Hiển thị hàng hóa đã lắp đặt" -#: common/setting/system.py:765 +#: common/setting/system.py:757 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:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "Mã tham chiếu đơn đặt bản dựng" -#: common/setting/system.py:787 +#: common/setting/system.py:779 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:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "Mẫu tham chiếu đơn đặt mua" -#: common/setting/system.py:910 +#: common/setting/system.py:918 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:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "Sửa đơn đặt mua đã hoàn thành" -#: common/setting/system.py:924 +#: common/setting/system.py:932 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:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "Tự động hoàn thành đơn đặt mua" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "Bật quên mật khẩu" -#: common/setting/system.py:946 +#: common/setting/system.py:954 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:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "Bật đăng ký" -#: common/setting/system.py:952 +#: common/setting/system.py:960 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:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "Bật SSO" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "Cho phép SSO tại trang đăng nhập" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "Bật đăng ký SSO" -#: common/setting/system.py:965 +#: common/setting/system.py:973 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:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "Yêu cầu email" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 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:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "Người dùng tự động điền SSO" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 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:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "Thư 2 lần" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 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:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "Mật khẩu 2 lần" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 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:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "Các tên miền được phép" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 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:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "Nhóm khi đăng ký" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "Bắt buộc MFA" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 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:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "Kiểm tra phần mở rộng khi khởi động" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 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:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "Kiểm tra cập nhật plugin" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "Bật tích hợp URL" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 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:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "Bật tích hợp điều hướng" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 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:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "Bật tích hợp ứng dụng" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "Bật phần mở rộng để thêm ứng dụng" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "Cho phép tích hợp lập lịch" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 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:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "Bật tích hợp nguồn cấp sự kiện" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 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:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "Ngoại trừ vị trí bên ngoài" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "Giai đoạn kiểm kê tự động" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "Hiển thị tên đầy đủ của người dùng" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 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:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "" @@ -3951,6 +4008,14 @@ msgstr "" msgid "Save the last used printing machines for a user" msgstr "" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "" @@ -4012,8 +4077,8 @@ msgstr "" msgid "Supplier is Active" msgstr "" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "Nhà sản xuất" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "Địa chỉ email liên hệ" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "Liên hệ" @@ -4111,7 +4176,7 @@ msgstr "" msgid "Company Tax ID" msgstr "" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "Địa chỉ" @@ -4203,12 +4268,12 @@ msgstr "Ghi chú nội bộ sử dụng cho chuyển phát nhanh" msgid "Link to address information (external)" msgstr "Liên kết thông tin địa chỉ (bên ngoài)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "Sản phẩm nhà sản xuất" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "Sản phẩm cơ bản" @@ -4221,8 +4286,8 @@ msgstr "Chọn sản phẩm" msgid "Select manufacturer" msgstr "Chọn nhà sản xuất" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "" @@ -4250,8 +4315,8 @@ msgstr "Đơn vị đóng gói phải lớn hơn không" 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:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "Nhà cung cấp" msgid "Select supplier" msgstr "Chọn nhà cung cấp" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "Đơn vị quản lý kho nhà cung cấp" @@ -4290,15 +4355,15 @@ msgstr "URL cho liên kết sản phẩm của nhà cung cấp bên ngoài" msgid "Supplier part description" msgstr "Mô tả sản phẩm nhà cung cấp" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "chi phí cơ sở" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "Thu phí tối thiểu (vd: phí kho bãi)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "Đóng gói" @@ -4315,7 +4380,7 @@ msgstr "Số lượng gói" 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:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "nhiều" @@ -4339,23 +4404,23 @@ msgstr "Ngày cập nhật cuối thông tin tồn kho" msgid "Supplier Price Break" msgstr "" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "Tiền tệ mặc định được sử dụng cho nhà cung cấp này" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "Còn hàng" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "" @@ -4511,7 +4576,7 @@ msgstr "" msgid "Errors" msgstr "" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "Hợp lệ" @@ -4623,7 +4688,7 @@ msgstr "" msgid "Connected" msgstr "" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "Không rõ" @@ -4727,7 +4792,7 @@ msgstr "" msgid "Value of the property" msgstr "" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "Nhóm" @@ -4751,117 +4816,117 @@ msgstr "" msgid "Maximum value for progress type, required if type=progress" msgstr "" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "Tham chiếu đơn đặt" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "Tạo bởi" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "Đặt hàng" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "Sản phẩm nội bộ" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "Đã hoàn thành" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "Đơn hàng" msgid "Sales Order" msgstr "Đơn đặt hàng" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,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:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "Tiền tệ đơn đặt hàng" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 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)" @@ -4914,11 +4979,11 @@ msgstr "" msgid "Order description (optional)" msgstr "Mô tả đơn đặt (tùy chọn)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "Mã dự án đã chọn cho đơn đặt hàng này" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "Liên kết đến trang bên ngoài" @@ -4930,7 +4995,7 @@ msgstr "" msgid "Scheduled start date for this order" msgstr "" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "Ngày mục tiêu" @@ -4963,12 +5028,12 @@ msgstr "Đầu mối liên hệ của đơn đặt này" msgid "Company address for this order" msgstr "Địa chỉ công ty cho đơn đặt này" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "Mã đặt hàng" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "Trạng thái" @@ -4992,15 +5057,15 @@ msgstr "Mã tham chiếu đơn đặt nhà cung cấp" msgid "received by" msgstr "nhận bởi" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "Ngày đặt hàng đã được hoàn thiện" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "Đích đến" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "" @@ -5024,616 +5089,624 @@ msgstr "Số lượng phải là số dương" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "Khách hàng" -#: order/models.py:1363 +#: order/models.py:1367 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:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "Tham chiếu khách hàng " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "Mã tham chiếu đơn đặt của khách hàng" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "Ngày giao hàng" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "vận chuyển bằng" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "" -#: order/models.py:1459 +#: order/models.py:1463 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:1463 +#: order/models.py:1467 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:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "" -#: order/models.py:1477 +#: order/models.py:1481 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:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "Số lượng mặt hàng" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "Tham chiếu khoản riêng" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "Ghi chú khoản riêng" -#: order/models.py:1844 +#: order/models.py:1861 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:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "Mô tả khoản riêng (tùy chọn)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "Ngữ cảnh bổ sung" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "Đơn giá" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "" -#: order/models.py:1939 +#: order/models.py:1956 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:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "Sản phẩm nhà cung cấp" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "Đã nhận" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "Số mục đã nhận" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "Giá mua" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "Giá đơn vị mua" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "" -#: order/models.py:2143 +#: order/models.py:2174 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:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "Giá bán" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "Giá bán đơn vị" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "Đã chuyển" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "Số lượng đã vận chuyển" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "Ngày vận chuyển" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "Ngày giao hàng" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "Ngày giao hàng của vận chuyển" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "Kiểm tra bởi" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "Người dùng đã kiểm tra vận chuyển này" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "Vận chuyển" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "Mã vận chuyển" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "Số theo dõi" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "Thông tin theo dõi vận chuyển" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "Mã hóa đơn" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "Số tham chiếu liên kết với hóa đơn" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "Vận đơn đã được gửi đi" -#: order/models.py:2439 +#: order/models.py:2470 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:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "Hàng trong kho chưa được giao" -#: order/models.py:2577 +#: order/models.py:2608 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:2580 +#: order/models.py:2611 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:2583 +#: order/models.py:2614 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:2599 +#: order/models.py:2630 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:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 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:2605 +#: order/models.py:2636 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:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 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:2614 +#: order/models.py:2645 msgid "Line" msgstr "Dòng" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "Tham chiếu vận đơn của đơn hàng bán" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "Hàng hóa" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "Chọn hàng trong kho để phân bổ" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "Nhập số lượng phân kho" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "Tham chiếu đơn hàng trả lại" -#: order/models.py:2777 +#: order/models.py:2808 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:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "Trạng thái đơn hàng trả lại" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "" -#: order/models.py:3065 +#: order/models.py:3096 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:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "Ngày nhận được" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "Kết quả" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "Kết quả cho hàng hóa dòng này" -#: order/models.py:3101 +#: order/models.py:3132 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:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "Sao chép thông số" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "Tên nhà cung cấp" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "Đơn đặt không thể bị hủy" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 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:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 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:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "Đơn đặt là không được mở" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "Tiền tệ giá mua" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "Mã sản phẩm nội bộ" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "Sản phẩm nhà cung cấp phải được chỉ định" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "Đơn đặt mua phải được chỉ định" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "Nhà cung cấp phải phù hợp với đơn đặt mua" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "Đơn đặt mua phải phù hợp với nhà cung cấp" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "Mục dòng" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "Chọn vị trí đích cho hàng hóa đã nhận" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "Nhập mã lô cho hàng trong kho đang đến" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "Ngày hết hạn" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "Nhập số sê ri cho hàng trong kho đang đến" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "Mã vạch" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "Mã vạch đã quét" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "Mã vạch đã được dùng" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "Dòng hàng hóa phải được cung cấp" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "Vị trí đích phải được chỉ ra" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "Giá trị mã vạch đã cung cấp phải duy nhất" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "Vận đơn đã hoàn thành" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "Tiền tệ giá bán" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "Chưa cung cấp thông tin vận chuyển" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 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:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "Số lượng phải là số dương" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "Nhập số sê ri để phân bổ" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "Vận đơn đã được chuyển đi" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 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:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "Không tìm thấy số sê ri sau đây" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "Dòng riêng biệt đơn hàng trả lại" -#: order/serializers.py:2116 +#: order/serializers.py:2136 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:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "Line item đã nhận được" -#: order/serializers.py:2156 +#: order/serializers.py:2176 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:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "Tiền tệ giá đồng hạng" @@ -5756,59 +5829,63 @@ msgstr "" msgid "Has Revisions" msgstr "" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "" @@ -5821,7 +5898,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:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "Điểm bán mặc định" @@ -5849,7 +5926,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:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "Biểu tượng (tùy chọn)" @@ -5870,984 +5947,1012 @@ 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:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "Nguyên liệu" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "Không thể dùng sản phẩm '{self}' trong BOM cho '{parent}' (đệ quy)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "Sản phẩm '{parent}' được dùng trong BOM cho '{self}' (đệ quy)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "IPN phải phù hợp mẫu biểu thức chính quy {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "" -#: part/models.py:901 +#: part/models.py:902 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:1031 +#: part/models.py:1032 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:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "" -#: part/models.py:1054 +#: part/models.py:1055 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:1069 +#: part/models.py:1070 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:1101 +#: part/models.py:1102 msgid "Part name" msgstr "Tên sản phẩm" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "Là Mẫu" -#: part/models.py:1107 +#: part/models.py:1108 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:1117 +#: part/models.py:1118 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:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "Biến thể của" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "Mô tả (không bắt buộc)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "Từ khóa" -#: part/models.py:1133 +#: part/models.py:1134 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:1143 +#: part/models.py:1144 msgid "Part category" msgstr "Danh mục sản phẩm" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "" -#: part/models.py:1158 +#: part/models.py:1159 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:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "Phiên bản" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "Hàng hóa này sẽ được cất vào đâu?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "Hết hạn mặc định" -#: part/models.py:1223 +#: part/models.py:1224 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:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "Kho tối thiểu" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "Cấp độ kho tối thiểu được phép" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "Đơn vị đo cho sản phẩm này" -#: part/models.py:1248 +#: part/models.py:1258 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:1254 +#: part/models.py:1264 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:1260 +#: part/models.py:1270 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:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "" -#: part/models.py:1272 +#: part/models.py:1282 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:1278 +#: part/models.py:1288 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:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "Sản phẩm này đang hoạt động?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "" -#: part/models.py:1294 +#: part/models.py:1304 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:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "Giá trị tổng kiểm BOM" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "Giá trị tổng kiểm BOM đã được lưu" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "BOM kiểm tra bởi" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "Ngày kiểm tra BOM" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "Tạo người dùng" -#: part/models.py:1346 +#: part/models.py:1356 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:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "Bán nhiều" -#: part/models.py:3317 +#: part/models.py:3327 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:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "Chi phí BOM tối thiểu" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối thiểu" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "Chi phí BOM tối đa" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "Chi phí thành phần sản phẩm tối đa" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "Chi phí mua vào tối thiểu" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "Chi phí mua vào tối thiểu trong lịch sử" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "Chi phí mua tối đa" -#: part/models.py:3355 +#: part/models.py:3365 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:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "Giá nội bộ tối thiểu" -#: part/models.py:3362 +#: part/models.py:3372 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:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "Giá nội bộ tối đa" -#: part/models.py:3369 +#: part/models.py:3379 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:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "Giá nhà cung ứng tối thiểu" -#: part/models.py:3376 +#: part/models.py:3386 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:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "Giá nhà cung ứng tối đa" -#: part/models.py:3383 +#: part/models.py:3393 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:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "Giá trị biến thể tối thiểu" -#: part/models.py:3390 +#: part/models.py:3400 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:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "Chi phí biến thể tối đa" -#: part/models.py:3397 +#: part/models.py:3407 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:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "Chi phí tối thiểu" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "Ghi đề chi phí tối thiểu" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "Chi phí tối đa" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "Ghi đề chi phí tối đa" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "Chi phí tối thiểu tính toán tổng thể" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "Chi phí tối đa tính toán tổng thể" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "Giá bán thấp nhất" -#: part/models.py:3432 +#: part/models.py:3442 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:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "Giá bán cao nhất" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "Giá bán cao nhất dựa trên phá giá" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "Chi phí bán hàng tối thiểu" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "Giá bán hàng tối thiểu trong lịch sử" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "Giá bán hàng tối đa" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "Giá bán hàng tối đa trong lịch sử" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "Sản phẩm dành cho kiểm kê" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "Tổng số hàng" -#: part/models.py:3477 +#: part/models.py:3487 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:3485 +#: part/models.py:3495 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:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "Ngày" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "Kiểm kê đã thực hiện" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "Chi phí kho tối thiểu" -#: part/models.py:3498 +#: part/models.py:3508 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:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "Chi phí kho tối đa" -#: part/models.py:3505 +#: part/models.py:3515 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:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "Tên kiểm thử" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "Nhập tên cho kiểm thử" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "Mô tả kiểm thử" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "Nhập mô tả cho kiểm thử này" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "Bắt buộc" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "Kiểm thử này bắt buộc phải đạt?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "Giá trị bắt buộc" -#: part/models.py:3750 +#: part/models.py:3760 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:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "Yêu cầu đính kèm" -#: part/models.py:3757 +#: part/models.py:3767 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:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "Chọn sản phẩm cha" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "Sản phẩm phụ" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "Chọn sản phẩm được dùng trong BOM" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "Số lượng BOM cho mục BOM này" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "Mục BOM này là tùy chọn" -#: part/models.py:4012 +#: part/models.py:4082 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:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "Tham chiếu mục BOM" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "Ghi chú mục BOM" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "Giá trị tổng kiểm" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "Giá trị tổng kiểm dòng BOM" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "Đã xác minh" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "Mục BOM này là hợp lệ" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "Nhận thừa hưởng" -#: part/models.py:4079 +#: part/models.py:4149 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:4085 +#: part/models.py:4155 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:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 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:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "Sản phẩm phụ phải được chỉ định" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "Sảm phẩm thay thế mục BOM" -#: part/models.py:4378 +#: part/models.py:4446 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:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "Hàng hóa BOM cha" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "Sản phẩm thay thế" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "Sản phẩm 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "Sản phẩm 2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "Chọn sản phẩm liên quan" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "" -#: part/models.py:4450 +#: part/models.py:4518 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:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "Đã tồn tại mối quan hệ trùng lặp" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "Phụ mục" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 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:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "Sản phẩm gốc" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "Chọn sản phẩm gốc để nhân bản" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "Sao chép ảnh" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "Sao chép hình ảnh từ sản phẩm gốc" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "Sao chép BOM" -#: part/serializers.py:410 +#: part/serializers.py:408 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:417 +#: part/serializers.py:415 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:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "Sao chép ghi chú" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "Sao chép ghi chú từ sản phẩm gốc" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "Số liệu tồn kho ban đầu" -#: part/serializers.py:451 +#: part/serializers.py:449 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:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "Vị trí kho ban đầu" -#: part/serializers.py:459 +#: part/serializers.py:457 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:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "Chọn nhà cung cấp (hoặc để trống để bỏ qua)" -#: part/serializers.py:492 +#: part/serializers.py:490 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:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "Mã số nhà sản xuất" -#: part/serializers.py:509 +#: part/serializers.py:507 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:518 +#: part/serializers.py:516 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:529 +#: part/serializers.py:527 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:536 +#: part/serializers.py:534 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:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "Tên danh mục" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "Đang dựng" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "Hàng trong kho" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: 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:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "Nhân bản sản phẩm" -#: part/serializers.py:969 +#: part/serializers.py:970 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:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "Số liệu kho ban đầu" -#: part/serializers.py:976 +#: part/serializers.py:977 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:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "Thông tin nhà cung cấp" -#: part/serializers.py:983 +#: part/serializers.py:984 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:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "Sao chép thông số nhóm hàng" -#: part/serializers.py:993 +#: part/serializers.py:994 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:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "Ảnh hiện có" -#: part/serializers.py:999 +#: part/serializers.py:1000 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:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "Tệp hình ảnh không tồn tại" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "Xác minh toàn bộ hóa đơn vật liệu" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "Có thể dựng" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "Giá thấp nhất" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "Giá trị tính toán ghi đè cho giá tối thiểu" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "Tiền tế giá tối thiểu" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "Giá cao nhất" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "Giá trị tính toán ghi đè cho giá tối đa" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "Tiền tế giá tối đa" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "Cập nhật" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "Cập nhật giá cho sản phẩm này" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, 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:1560 +#: part/serializers.py:1549 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:1563 +#: part/serializers.py:1552 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:1716 -msgid "Quantity must be greater than or equal to zero" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 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:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "Xóa dữ liệu đã tồn tại" -#: part/serializers.py:2000 +#: part/serializers.py:1998 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:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "Bao gồm thừa hưởng" -#: part/serializers.py:2006 +#: part/serializers.py:2004 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:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "Bỏ qua dòng không hợp lệ" -#: part/serializers.py:2012 +#: part/serializers.py:2010 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:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "Sao chép sản phẩm thay thế" -#: part/serializers.py:2018 +#: part/serializers.py:2016 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" @@ -7099,15 +7204,15 @@ msgstr "Số lượng cần phân bổ" msgid "Label printing failed" msgstr "In nhãn thất bại" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "" @@ -7168,7 +7273,7 @@ msgstr "Cung cấp hỗ trợ gốc cho mã vạch" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "Máy in nhãn InvenTree PDF" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "Cung cấp hỗ trợ gốc để in nhãn PDF" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Chế độ gỡ lỗi" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "Bật chế độ gỡ lỗi - trả về mã HTML thuần thay vì PDF" @@ -7568,7 +7673,7 @@ msgstr "Viền" msgid "Print a border around each label" msgstr "In một viền xung quanh từng nhãn" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "Ngang" @@ -8029,7 +8134,7 @@ msgstr "" msgid "Invalid label dimensions" msgstr "" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "" @@ -8073,112 +8178,112 @@ msgstr "" msgid "Save report output as an attachment against linked model instance when printing" msgstr "" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "Mẫu tên tệp" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "Bộ lọc" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "Khổ giấy cho báo cáo PDF" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "Tạo báo cáo theo hướng ngang" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "Chiều rộng [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "Chiều rộng nhãn, tính theo mm" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "Chiều cao [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "Chiều cao nhãn, tính theo mm" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "Mẫu trích" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "Tệp báo cáo mẫu" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "Mô tả tệp báo cáo mẫu" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "Tài sản" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "Tệp báo cáo tài sản" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "Mô tả tệp báo cáo tài sản" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "Số sê-ri" @@ -8538,7 +8643,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:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "Kho hàng" @@ -8546,11 +8651,11 @@ msgstr "Kho hàng" msgid "Stock Locations" msgstr "Vị trí kho hàng" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "Chủ sở hữu" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "Chọn chủ sở hữu" @@ -8558,7 +8663,7 @@ msgstr "Chọn chủ sở hữu" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "Không thể đưa trực tiếp hàng trong kho vào bên trong vị trí kho hàng có cấu trúc, nhưng có thể đặt vào kho con." -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "Bên ngoài" @@ -8578,274 +8683,282 @@ 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:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "" -#: stock/models.py:911 +#: stock/models.py:924 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:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 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:955 +#: stock/models.py:979 #, 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:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 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:968 +#: stock/models.py:992 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:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "Hàng hóa không thể thuộc về chính nó" -#: stock/models.py:995 +#: stock/models.py:1019 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:1008 +#: stock/models.py:1032 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:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "Hàng trong kho cha" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "Sản phẩm cơ bản" -#: stock/models.py:1044 +#: stock/models.py:1068 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:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "Hàng trong kho này được đặt ở đâu?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 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:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "Đã cài đặt trong" -#: stock/models.py:1075 +#: stock/models.py:1099 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:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "Số sê ri cho mục này" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "Mã lô cho hàng trong kho này" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "Số lượng tồn kho" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "Bản dựng nguồn" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "Bản dựng cho hàng hóa này" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "Tiêu thụ bởi" -#: stock/models.py:1139 +#: stock/models.py:1163 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:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "Đơn đặt mua nguồn" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "Đơn đặt mua cho hàng hóa này" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "Đơn hàng bán đích" -#: stock/models.py:1169 +#: stock/models.py:1193 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:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "Xóa khi thiếu hụt" -#: stock/models.py:1188 +#: stock/models.py:1212 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:1209 +#: stock/models.py:1233 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:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "Đã chuyển đổi sang sản phẩm" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "" -#: stock/models.py:1893 +#: stock/models.py:1917 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:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "Số lượng phải là số nguyên" -#: stock/models.py:1907 +#: stock/models.py:1931 #, 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:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "Số lượng không khớp với số sêri" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "" -#: stock/models.py:2071 +#: stock/models.py:2095 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:2075 +#: stock/models.py:2099 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:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "Hàng trong kho chứa hàng hóa khác" -#: stock/models.py:2081 +#: stock/models.py:2105 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:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "Hàng trong kho hiện đang sản xuất" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "Không thể hợp nhất kho nối tiếp" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "Mặt hàng trùng lặp" -#: stock/models.py:2098 +#: stock/models.py:2122 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:2106 +#: stock/models.py:2130 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:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "Mã trạng thái kho phải phù hợp" -#: stock/models.py:2411 +#: stock/models.py:2435 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:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "Ghi chú đầu vào" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "" -#: stock/models.py:3026 +#: stock/models.py:3050 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:3030 +#: stock/models.py:3054 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:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "Kết quả kiểm thử" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "Giá trị đầu ra kiểm thử" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "Đính kèm kết quả kiểm thử" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "Ghi chú kiểm thử" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "" @@ -8929,7 +9042,7 @@ msgstr "Điền số sêri cho hàng hóa mới" msgid "Supplier Part Number" msgstr "Số hiệu hàng hoá nhà cung cấp" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "Đã hết hạn" @@ -9466,131 +9579,131 @@ msgstr "Lần cuối mã thông báo được sử dụng" msgid "Revoked" msgstr "Đã thu hồi" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "Quyền hạn đã đặt" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "Xem" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "Quyền để xem mục" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "Thêm" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "Quyền để thêm mục" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "Đổi" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "Quyển để sửa mục" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "Xóa" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "Quyền để xóa mục" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "" 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 dc7b7d99db..e0f83e84cb 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:09\n" "Last-Translator: \n" "Language-Team: Chinese Simplified\n" "Language: zh_CN\n" @@ -89,6 +89,7 @@ msgstr "不能将 {original} 转换到 {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "提供的数量无效" @@ -104,11 +105,11 @@ msgstr "输入日期" msgid "Invalid decimal value" msgstr "无效的数值" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -165,7 +166,7 @@ msgstr "数据包含禁止的 markdown 内容" #: InvenTree/helpers_model.py:109 msgid "Invalid URL: no hostname" -msgstr "URL无效:无主机名" +msgstr "无效URL:没有主机名" #: InvenTree/helpers_model.py:114 msgid "Invalid URL: hostname could not be resolved" @@ -175,39 +176,39 @@ msgstr "无效URL:无法解析的主机名" msgid "URL points to a private or reserved IP address" msgstr "URL指向私有或保留IP地址" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "太多重定向" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "连接错误" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "服务器响应状态码无效" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "发生异常" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "服务器响应的内容长度值无效" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "图片尺寸过大" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "图片下载超出最大尺寸" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "远程服务器返回了空响应" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一个有效的图片文件" @@ -219,7 +220,7 @@ msgstr "登录应用程序" msgid "Email" msgstr "电子邮件" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "您必须启用双重身份验证才能进行后续操作。" @@ -263,124 +264,108 @@ msgstr "参考字段必须符合指定格式" msgid "Reference number is too large" msgstr "参考编号过大" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "无效选项" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "名称" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "描述" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "描述(选填)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "路径" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "同一父级下不能存在重复名称" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown备注(选填)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "条码数据" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "第三方条码数据" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "条码哈希值" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "条码数据的唯一哈希值" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "检测到已存在条码" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "服务器错误" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "服务器记录了一个错误。" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "必须是有效数字" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "货币" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "从可用选项中选择货币" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "此字段不能为空。" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "无效值" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "远程图片" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "远程图片文件的 URL" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "未启用从远程 URL下载图片" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "从远程URL下载图像失败" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "无效的内容类型格式" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "未找到内容类型" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "内容类型不匹配所需的 mixin 类" @@ -552,8 +537,8 @@ msgstr "无效的物理单位" msgid "Not a valid currency code" msgstr "无效的货币代码" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "订单状态" @@ -561,21 +546,21 @@ msgstr "订单状态" msgid "Parent Build" msgstr "父级生产订单" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "包含变体" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "包含变体" msgid "Part" msgstr "零件" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "类别" @@ -605,7 +590,7 @@ msgstr "类别" msgid "Ancestor Build" msgstr "可测试部分" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "分配给我" @@ -653,11 +638,11 @@ msgstr "完成日期早于" msgid "Completed after" msgstr "完成日期晚于" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "最小日期" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "最大日期" @@ -669,16 +654,16 @@ msgstr "排除树" msgid "Build must be cancelled before it can be deleted" msgstr "生产订单必须取消后才能删除" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "耗材" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "可选项" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "装配件" @@ -687,32 +672,32 @@ msgstr "装配件" msgid "Tracked" msgstr "可追溯" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "需检测" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "未结算订单" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "已分配" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "已消耗" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "已订购" @@ -720,7 +705,7 @@ msgstr "已订购" msgid "Build not found" msgstr "未找到版本" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "生产订单" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "库存位置" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "产出" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "生产订单编号" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "生产状态" msgid "Build status code" msgstr "生产状态代码" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "批号" @@ -870,8 +855,8 @@ msgstr "批号" msgid "Batch code for this build output" msgstr "本批产出的批次编号" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "建立日期" @@ -891,7 +876,7 @@ msgstr "计划完成日期" msgid "Target date for build completion. Build will be overdue after this date." msgstr "生产订单的计划完成时间,逾期后系统将标记为超期。" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "完成日期" @@ -907,8 +892,8 @@ msgstr "发起人" msgid "User who issued this build order" msgstr "创建该生产订单的用户" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "责任方" @@ -917,12 +902,12 @@ msgstr "责任方" msgid "User or group responsible for this build order" msgstr "该生产订单的责任人或责任团队" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "外部链接" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "指向外部资源的URL链接" @@ -934,8 +919,8 @@ msgstr "生产优先级" msgid "Priority of this build order" msgstr "此生产订单的优先级" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "项目编号" @@ -968,7 +953,7 @@ msgstr "生产订单已完成" msgid "Serial numbers must be provided for trackable parts" msgstr "可追溯零件必须填写序列号" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "未指定产出" @@ -980,47 +965,47 @@ msgstr "产出已完成" msgid "Build output does not match Build Order" msgstr "产出与生产订单不匹配" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "数量必须大于零" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "数量不能大于产出数量" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "产出未通过所有必要测试" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "产出 {serial} 未通过所有必要测试" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "已分配的库存物料仍在生产中" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "存在已分配物料时无法部分完成生产输出" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "生产订单行项目" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "生产对象" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "生产对象" msgid "Quantity" msgstr "数量" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "生产订单所需数量" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "库存消耗量" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生产项必须指定产出,因为主零件已经被标记为可追踪的" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "所选库存项与物料清单行项不匹配" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "序列化物料的数量必须为1" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配数量 ({q}) 不得超过可用库存数量 ({a})" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "库存品项超额分配" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "库存项" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "源库存项" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "分配给该生产任务的库存量" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "安裝到" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "目标库存项" @@ -1099,7 +1084,7 @@ msgstr "目标库存项" msgid "Build Level" msgstr "生产等级" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "零件名称" @@ -1135,7 +1120,7 @@ msgstr "可追踪的零件数量必须为整数" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因为物料清单包含可追踪的零件,所以数量必须为整数" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "序列号" @@ -1156,8 +1141,8 @@ msgstr "自动分配序列号" msgid "Automatically allocate required items with matching serial numbers" msgstr "自动为所需项目分配对应的序列号" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "以下序列号已存在或无效" @@ -1245,7 +1230,7 @@ msgstr "接受库存项未被完全分配至生产订单" msgid "Required stock has not been fully allocated" msgstr "必需库存未完成全量分配" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "接受未完工" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part 必须与生产订单零件相同" msgid "Item must be in stock" msgstr "项目必须在库存中" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" @@ -1306,7 +1291,7 @@ msgstr "对于被追踪的零件的分配,必须指定生产产出" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "对于未被追踪的零件,无法指定生产产出" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "必须提供分配项目" @@ -1386,9 +1371,9 @@ msgstr "安裝到" msgid "Build" msgstr "生产" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "供应商零件" @@ -1404,7 +1389,7 @@ msgstr "生产订单编号" msgid "Part Category Name" msgstr "零件类别名称" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "可追踪" @@ -1412,29 +1397,29 @@ msgstr "可追踪" msgid "Inherited" msgstr "已继承的" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "允许变体" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "物料清单项" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "生产中" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "生产计划" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "外部库存" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "可用库存" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "用户没有权限删除此附件" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "用户没有编辑此附件的权限" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "用户没有权限删除此附件" @@ -1554,610 +1543,634 @@ msgstr "暂无插件" msgid "Project Code Label" msgstr "项目编号标签" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "已是最新" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "最后更新时间戳" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "更新于" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "上次修改该对象的用户" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "唯一项目编码" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "项目描述" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "负责此项目的用户或团队" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "设置密钥" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "设定值" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "所选值不是一个有效的选项" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "该值必须是布尔值" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "该值必须为整数" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "必须是有效数字" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "值未通过验证检查" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "键字符串必须是唯一的" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "使用者" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "批发价数量" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "价格" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "指定数量的单位价格" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "端点" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "接收此网络钩子的端点" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "此网络钩子的名称" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "激活" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "网络钩子是否已启用" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "令牌" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "访问令牌" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "密钥" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "HMAC共享密钥" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "此邮件的唯一标识符" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "主机" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "接收此消息的主机" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "标题" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "此消息的标题" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "正文" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "此消息的正文" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "接收此消息的终点" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "工作于" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "这条消息的工作完成了吗?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "标识" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "标题" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "链接" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "已发布" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "作者" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "摘要" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "阅读" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "这条新闻被阅读了吗?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "图像文件" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "此图像的目标模型类型" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "此图像的目标型号ID" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "自定义单位" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "单位符号必须唯一" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "单位名称必须是有效的标识符" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "单位名称" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "符号" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "可选单位符号" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "定义" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "单位定义" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "附件" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "缺少文件" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "缺少外部链接" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "没有要重命名的文件" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "文件名不能为空" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "无效的文件名" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "无法更改文件扩展名" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "已存在同名文件" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "重命名文件保存失败" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "模型类型" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "图片的目标模型类型" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "选择附件" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "备注" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "附件备注" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "上传日期" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "上传文件的日期" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "文件大小" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "文件大小,以字节为单位" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "为附件指定的模型类型无效" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "自定状态" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "定制状态" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "参考状态设置" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "使用此自定义状态扩展状态的状态集" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "逻辑密钥" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "等同于商业逻辑中自定义状态的状态逻辑键" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "值" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "将保存至模型数据库的数值" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "状态名" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "标签" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "将在前端显示的标签" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "颜色" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "将在前端显示颜色" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "型号" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "该状态关联的模型" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "必须选定模型" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "必须选取密钥" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "必须选中逻辑密钥" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "密钥必须不同于逻辑密钥" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "必须提供有效的参考状态类" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "密钥必须不同于参考状态的逻辑密钥" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "逻辑密钥必须在参考状态的逻辑键中" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "名称必须不同于参考状态的名称" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "选择列表" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "选择列表" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "选择列表的名称" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "选择列表的描述" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "已锁定" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "此选择列表是否已锁定?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "能否使用此选择列表?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "源插件" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "提供选择列表的插件" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "源字符串" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "可选字符串,用于标识本列表的数据来源" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "缺省项" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "本选择列表的默认选项" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "已创建" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "选择列表的创建日期和时间" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "最近更新" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "选择列表的最后更新时间" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "选择列表项" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "选择列表项" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "此选项归属的选择列表" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "选择列表项的值" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "选择列表项的标签" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "选择列表项的描述" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "该选择列表项是否处于激活状态?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "参数模板" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "参数模板" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "勾选框参数不能有单位" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "复选框参数不能有选项" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "选择必须是唯一的" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "参数模板名称必须是唯一的" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "此参数模板的目标模型类型" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "参数名称" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "单位" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "此参数的物理单位" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "参数说明" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "勾选框" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "此参数是否为勾选框?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "选项" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "此参数的有效选择 (逗号分隔)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "此参数的选择列表" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "已启用" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "此参数模板是否启用?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "参数" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "参数" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "无效的参数值选择" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "为附件指定的模型类型无效" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "型号ID" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "此参数的目标模型的 ID" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "模板" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "参数模板" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "数据" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "参数值" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "参数值" msgid "Note" msgstr "备注" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "可选注释字段" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "扫描条码" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "条码数据" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "扫描条码的用户" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "时间戳" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "扫描条形码的日期和时间" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "处理条码的 URL 端点" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "扫描条形码的上下文数据" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "响应" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "扫描条形码的响应数据" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "结果" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "条码扫描成功吗?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "发生错误" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "电子邮件信息" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "电子邮箱信息" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "已发布" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "已发送" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "失败" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "已送达" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "已确认" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "入站" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "出站" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "暂无回复消息" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "跟踪交付" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "已读追踪" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "点击追踪" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "全局ID" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "此消息的标识符 (可能由外部系统提供)" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "主题 ID" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此消息主题的标识符 (可能由外部系统提供)" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "主题" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "链接到此消息的主题" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "优先" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "邮件主题" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "邮件主题" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "键" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "此主题的唯一密钥 (用于识别主题)" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "此主题的唯一标识符" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "内部服务已启动" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "该线程是否为内部启动的?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "创建主题的日期和时间" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "主题最后更新的日期和时间" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "收到的物品" @@ -2457,7 +2470,7 @@ msgstr "文件名" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "模型类型" @@ -2547,19 +2560,19 @@ msgstr "只向超级管理员显示关于信息" #: common/setting/system.py:239 msgid "Show superuser banner" -msgstr "" +msgstr "显示超级用户横幅" #: common/setting/system.py:240 msgid "Show a warning banner in the UI when logged in as superuser" -msgstr "" +msgstr "以超级用户身份登录时,在用户界面中显示警告横幅" #: common/setting/system.py:245 msgid "Show admin banner" -msgstr "" +msgstr "显示管理员横幅" #: common/setting/system.py:246 msgid "Show a warning banner in the UI when logged in as admin" -msgstr "" +msgstr "以管理员身份登录时,在用户界面中显示警告横幅" #: common/setting/system.py:251 company/models.py:147 company/models.py:148 msgid "Company name" @@ -2601,13 +2614,13 @@ msgstr "货币更新间隔时间" msgid "How often to update exchange rates (set to zero to disable)" msgstr "检查更新的频率(设置为零以禁用)" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "天" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "使用货币更新插件" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "从URL下载" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "允许从外部 URL 下载远程图片和文件" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "下载大小限制" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "远程图片的最大允许下载大小" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "用于从 URL 下载的 User-agent" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "严格的 URL 验证" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "验证 URL 时需要 schema 规范" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "更新检查间隔" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "检查更新的频率(设置为零以禁用)" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "自动备份" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "启用数据库和媒体文件的自动备份" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "自动备份间隔" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "指定自动备份之间的间隔天数" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "任务删除间隔" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "后台任务结果将在指定天数后删除" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "错误日志删除间隔" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "错误日志将在指定天数后被删除" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "通知删除间隔" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "用户通知将在指定天数后被删除" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "邮件自动清理周期" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "邮件将在指定天数后删除" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "保护邮件日志" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "防止邮件日志条目被删除" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "条形码支持" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "在网页界面启用条形码扫描器支持" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "存储条形码结果" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "存储条形码扫描结果" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "条形码扫描最大计数" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "保存的条形码扫描结果的最大数量" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "条形码扫描延迟设置" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "条形码输入处理延迟时间" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "启用摄像头扫码支持" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "允许通过网络摄像头扫描条形码" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "显示条形码数据" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "在浏览器中将条形码数据显示为文本" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "条形码生成插件" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "用于内部条形码数据生成的插件" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "零件修订" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "启用零件修订字段" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "仅限装配修订版本" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "仅允许对装配零件进行修订" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "允许从装配中删除" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "允许删除已在装配中使用的零件" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN(内部零件号)正则规则" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "用于匹配IPN(内部零件号)格式的正则表达式" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "允许重复的 IPN(内部零件号)" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "允许多个零件共享相同的 IPN(内部零件号)" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "允许编辑 IPN(内部零件号)" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "允许编辑零件时更改IPN(内部零件号)" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "复制零件物料清单数据" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "复制零件时默认复制物料清单数据" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "复制零件参数数据" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "复制零件时默认复制参数数据" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "复制零件测试数据" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "复制零件时默认复制测试数据" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "复制类别参数模板" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "创建零件时复制类别参数模板" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "零件默认为模板" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "默认情况下,元件可由其他零件组装而成" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "组件" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "默认情况下,零件可用作子部件" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "可购买" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "默认情况下可购买零件" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "可销售" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "零件默认为可销售" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "默认情况下可跟踪零件" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "虚拟的" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "默认情况下,零件是虚拟的" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "显示关联零件" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "显示零件的关联零件" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "允许创建初始库存" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "允许在添加新零件时创建初始库存数据" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "允许创建供应商数据" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "允许在添加新零件时创建初始供应商数据" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "零件名称显示格式" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "显示零件名称的格式" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "零件类别默认图标" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "零件类别默认图标 (空表示没有图标)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "最小定价小数位数" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "呈现定价数据时显示的最小小数位数" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "最大定价小数位数" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "呈现定价数据时显示的最大小数位数" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "使用供应商定价" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "将供应商的批发价纳入整体价格计算" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "采购历史价优先" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "当存在历史采购订单价格时,将忽略供应商的批发价" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "使用库存项定价" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "使用手动输入的库存数据进行定价计算" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "库存项目定价时间" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "从定价计算中排除超过此天数的库存项目" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "使用变体定价" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "将产品变体的特殊定价纳入整体价格计算" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "仅限活跃变体" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "仅使用活跃变体零件计算变体价格" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "自动更新定价" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "当内部数据变化时自动更新零件价格" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "价格重建间隔" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "零件价格自动更新前的天数" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "内部价格" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "为零件启用内部核算价格功能" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "内部价格优先" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "若存在内部价格,将覆盖BOM价格区间计算结果" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "允许BOM数量为零" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "启用标签打印功能" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "启用从网络界面打印标签" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "标签图片 DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "生成图像文件以供标签打印插件使用时的 DPI 分辨率" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "启用报告" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "启用报告生成" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "调试模式" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "以调试模式生成报告(HTML 输出)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "日志错误报告" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "记录生成报告时出现的错误" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "页面大小" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "PDF 报告默认页面大小" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "强制参数单位" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "如果提供了单位,参数值必须与指定的单位匹配" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "全局唯一序列号" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "库存项的序列号必须全局唯一" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "删除已耗尽的库存" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "设置库存耗尽时的默认行为" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "删除序列化库存" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "允许删除带有序列号的库存商品" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "批号模板" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "为库存项生成默认批号的模板" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "库存过期" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "启用库存过期功能" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "销售过期库存" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "允许销售过期库存" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "库存临期预警天数" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "库存项过期前被标记为\"临期\"的天数" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "允许使用过期库存" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "允许在生产中使用已过期的库存" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "库存所有权管控" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "启用对库存地点和库存物品的归属权管理" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "库存地点默认图标" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "库存地点默认图标 (空表示没有图标)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "显示已安装的库存项" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "在库存列表中显示已被安装到设备中的库存项" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "在安装项目时检查物料清单" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "已安装的库存项目必须存在于上级零件的物料清单中" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "允许零库存调拨" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "允许对当前库存量为零的物品执行库位间调拨操作" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "生产订单参考模式" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "生成生产订单参考字段所需的模式" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "要求负责人" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "必须为每个订单分配一个负责人" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "需要活动零件" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "防止为非活动零件创建生产订单" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "需要锁定零件" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "防止为未锁定的零件创建生产订单" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "需要有效的物料清单" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "除非物料清单已验证,否则禁止创建生产订单" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "需要关闭子订单" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "在所有子订单关闭之前,阻止生产订单的完成" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "外部生产订单" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "启用外部生产订单功能" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "需要外部生产订单" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "从外部供应商订购组装好的零件时,需要外部生产订单" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "阻止直到测试通过" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "标记为已发货的销售订单将自动完成,绕过“已发货”状态" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "阻止未完成项目测试" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "如果所需的物料测试未完成,则阻止将库存物料分配给销售订单" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "采购订单参考模式" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "生成采购订单参考字段所需的模式" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "编辑已完成的采购订单" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "允许在采购订单已配送或完成后编辑订单" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "货币转换" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "收货时将物料价值折算为基准货币" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "自动完成采购订单" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "当收到所有行项目时,自动将采购订单标记为完成" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "忘记启用密码" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "在登录页面上启用忘记密码功能" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "启用注册" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "在登录页面为用户启用自行注册功能" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "启用SSO登录" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "在登录页面启用单点登录(SSO)功能" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "启用SSO注册" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "允许用户通过登录页面的SSO系统注册账号" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "启用SSO组同步" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "启用后,将自动同步InvenTree用户组与身份提供商(IdP)提供的用户组" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "SSO组属性键" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "身份提供商(IdP)返回的组信息声明属性名称" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "SSO组映射关系" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "移除非SSO来源的用户组" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "必须提供邮箱" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "用户注册时必须提供邮箱" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "自动填充SSO用户信息" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "自动从SSO账户数据中填充用户详细信息" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "发两次邮件" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "注册时询问用户他们的电子邮件两次" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "两次输入密码" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "当注册时请用户输入密码两次" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "域名白名单" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "限制注册到某些域名 (逗号分隔,以 @ 开头)" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "注册默认分组" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "强制启用多因素安全认证" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "用户必须使用多因素安全认证。" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "启用此设置将要求所有用户设置多元素认证。所有会话将立即断开连接。" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "启动时检查插件" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "启动时检查全部插件是否已安装 - 在容器环境中启用" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "检查插件更新" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "启用定期检查已安装插件的更新" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "启用统一资源定位符集成" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "启用插件以添加统一资源定位符路由" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "启用导航集成" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "启用插件以集成到导航中" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "启用应用集成" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "启用插件添加应用" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "启用调度集成" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "启用插件来运行预定任务" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "启用事件集成" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "启用插件响应内部事件" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "启用界面集成" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "启用插件集成到用户界面" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "启用邮件集成" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "启用插件来处理发送/接收邮件" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "启用项目编码" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "启用项目编码来跟踪项目" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "启用盘点" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "启用历史库存水平及价值记录功能" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "排除外部地点" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "将外部库位的库存物料排除在盘点计算之外" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "自动盘点周期" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "自动库存盘点记录的间隔天数" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "删除旧的盘点记录条目" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "删除超过指定天数的库存盘点记录" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "库存盘点记录删除周期" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "库存盘点记录将在指定天数后自动删除" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "删除旧的库存跟踪记录" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "删除超过指定天数的库存跟踪记录" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "库存跟踪记录删除周期" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "库存跟踪记录将在指定天数后自动删除" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "显示用户全名" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "显示用户全名而不是用户名" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "显示用户配置" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "在用户个人资料页展示其档案信息" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "一周从……开始" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "星期几的起始日,用于在日历视图中显示" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "星期天" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "星期一" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "星期二" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "星期三" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "星期四" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "星期五" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "星期六" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "启用测试站数据" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "启用测试站数据收集以获取测试结果" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "启用设备状态检测" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "启用定期 Ping 检测,确认注册设备的运行状态" @@ -3931,11 +3988,11 @@ msgstr "禁用时:完整分类路径以悬停提示框形式显示。\n" #: common/setting/user.py:255 msgid "Show Subassemblies in BOM table" -msgstr "" +msgstr "在物料清单表中显示子装配" #: common/setting/user.py:256 msgid "Enable display of subassemblies in the BOM table" -msgstr "" +msgstr "启用物料清单表中的子装配显示" #: common/setting/user.py:261 msgid "Receive error reports" @@ -3953,6 +4010,14 @@ msgstr "上次使用的打印设备" msgid "Save the last used printing machines for a user" msgstr "为用户保存上次使用的打印设备" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "最终级别的展示项目" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "对于没有子项的位置或类别,自动默认显示项目/零件,而不是子级别" + #: common/validators.py:38 msgid "All models" msgstr "全部型号" @@ -4014,8 +4079,8 @@ msgstr "内部零件已激活" msgid "Supplier is Active" msgstr "供应商已激活" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "制造商" @@ -4061,7 +4126,7 @@ msgid "Contact email address" msgstr "联系人电子邮箱地址" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "联系人" @@ -4113,7 +4178,7 @@ msgstr "税号" msgid "Company Tax ID" msgstr "公司税号" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "地址" @@ -4205,12 +4270,12 @@ msgstr "内部使用的装运通知单" msgid "Link to address information (external)" msgstr "链接地址信息 (外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "制造商零件" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "基础零件" @@ -4223,8 +4288,8 @@ msgstr "选择零件" msgid "Select manufacturer" msgstr "选择制造商" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "制造商零件编号" @@ -4252,8 +4317,8 @@ msgstr "包装单位必须大于零" msgid "Linked manufacturer part must reference the same base part" msgstr "链接的制造商零件必须引用相同的基础零件" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4264,7 +4329,7 @@ msgstr "供应商" msgid "Select supplier" msgstr "选择供应商" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "供应商库存管理单位" @@ -4292,15 +4357,15 @@ msgstr "外部供应商零件链接的URL" msgid "Supplier part description" msgstr "供应商零件说明" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "基本费用" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低费用(例如库存费)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "打包" @@ -4317,7 +4382,7 @@ msgstr "包装数量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "单包供应的总数量。为单个项目留空。" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "多个" @@ -4341,25 +4406,25 @@ msgstr "上次更新可用性数据的日期" msgid "Supplier Price Break" msgstr "供应商批发价" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "此供应商使用的默认货币" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "公司名称" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "有库存" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "批发价" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" -msgstr "" +msgstr "美化名称" #: data_exporter/mixins.py:328 data_exporter/mixins.py:417 msgid "Error occurred during data export" @@ -4513,7 +4578,7 @@ msgstr "原始行数据" msgid "Errors" msgstr "错误" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "有效" @@ -4625,7 +4690,7 @@ msgstr "每个标签要打印的份数" msgid "Connected" msgstr "已连接" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "未知" @@ -4729,7 +4794,7 @@ msgstr "属性键" msgid "Value of the property" msgstr "属性值" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "组" @@ -4753,117 +4818,117 @@ msgstr "最大进度" msgid "Maximum value for progress type, required if type=progress" msgstr "进度类型的最大值。当 type=progress 时为必填项" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "订单参考" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "未完成" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "有项目编码" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "创建人" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "创建时间早于" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "创建时间晚于" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "有开始日期" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "开始日期早于" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "开始日期晚于" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "有目标日期" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "目标日期早于" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "目标日期晚于" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "更新时间早于" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "更新时间晚于" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "有定价" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "完成时间早于" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "完成时间晚于" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "外部生产订单" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "订单" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "订单完成" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "内部零件" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "订单待定" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "已完成" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "有配送" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "未找到发货记录" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4871,8 +4936,8 @@ msgstr "采购订单" msgid "Sales Order" msgstr "销售订单" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4888,11 +4953,11 @@ msgstr "总价格" msgid "Total price for this order" msgstr "此订单的总价" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "订单货币" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "此订单的货币 (留空以使用公司默认值)" @@ -4916,11 +4981,11 @@ msgstr "地址与所选公司不匹配" msgid "Order description (optional)" msgstr "订单描述 (可选)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "为此订单选择项目编码" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "链接到外部页面" @@ -4932,7 +4997,7 @@ msgstr "开始日期" msgid "Scheduled start date for this order" msgstr "本订单的预定开始日期" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "预计日期" @@ -4965,12 +5030,12 @@ msgstr "此订单的联系人" msgid "Company address for this order" msgstr "此订单的公司地址" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "订单参考" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "狀態" @@ -4994,15 +5059,15 @@ msgstr "供应商订单参考代码" msgid "received by" msgstr "接收人" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "订单完成日期" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "目的地" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "接收物品的目标" @@ -5026,616 +5091,624 @@ msgstr "数量必须是正数" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "序列号不能分配给虚拟件" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "客户" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "出售物品的公司" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "销售订单状态" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "客户参考 " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "客户订单参考代码" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "发货日期" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "发货人" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "订单已完成" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "订单已取消" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "只有未结订单才能标记为已完成" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "由于发货不完整,订单无法完成" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "由于缺货,订单无法完成" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "订单无法完成,因为行项目不完整" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "订单已锁定,不可修改" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "项目数量" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "行号" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "此项目的行号(可选)" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "行项目参考" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "行项目注释" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "此行项目的目标日期 (留空以使用订单中的目标日期)" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "行项目描述 (可选)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "此行的附加上下文" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "单位价格" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "采购订单行项目" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "供应商零件必须与供应商匹配" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "生产订单必须标记为外部" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "生产订单仅可关联至装配零件" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "生产订单零件必须与行项目零件一致" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "装配零件需要外部生产订单" + +#: order/models.py:2023 msgid "Supplier part" msgstr "供应商零件" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "已接收" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "收到的物品数量" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "采购价格" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "每单位的采购价格" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "外部生产订单需由此行项目履行" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "采购订单附加行" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "销售订单行项目" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "只有可销售的零件才能分配给销售订单" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "售出价格" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "单位售出价格" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "已配送" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "发货数量" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "销售订单发货" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "收货地址必须与该客户的资料一致" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "本次发货的收货地址" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "发货日期" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "送达日期" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "装运交货日期" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "审核人" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "检查此装运的用户" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "配送单号" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "跟踪单号" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "配送跟踪信息" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "发票编号" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "相关发票的参考号" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "货物已发出" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "发货没有分配库存项目" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "货件必须先经核对,方可标记为完成" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "销售订单加行" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "销售订单分配" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "库存项目尚未分配" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "无法将库存项目分配给具有不同零件的行" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "无法将库存分配给没有零件的生产线" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "分配数量不能超过库存数量" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "分配的数量必须大于零" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化库存项目的数量必须为1" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "销售订单与发货不匹配" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "发货与销售订单不匹配" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "行" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "销售订单发货参考" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "项目" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "选择要分配的库存项目" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "输入库存分配数量" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "退货订单参考" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "退回物品的公司" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "退货订单状态" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "退货订单行项目" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "必须指定库存项" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "退回数量超过库存数量" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "退回数量必须大于零" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "序列化库存项的数量无效" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "选择要从客户处退回的商品" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "接收日期" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "收到此退货的日期" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "结果" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "该行项目的结果" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "与此行项目的退货或维修相关的成本" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "退货订单附加行" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "订单ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "要复制的订单ID" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "复制行" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "从原始订单复制行项目" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "复制额外行" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "从原始订单复制额外的行项目" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "复制参数" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "从原始订单复制订单参数" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "已完成行项目" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "复制订单" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "指定复制此订单的选项" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "订单ID不正确" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "供应商名称" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "订单不能取消" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "允许关闭行项目不完整的订单" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "订单中的行项目不完整" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "订单未打开" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "自动定价" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根据供应商零件数据自动计算采购价格" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "购买价格货币" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "合并项目" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "将具有相同零件、目的地和目标日期的项目合并到一个行项目中" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "库存量单位" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "内部零件编号" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "内部零件名称" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "必须指定供应商零件" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "必须指定采购订单" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "供应商必须匹配采购订单" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "采购订单必须与供应商匹配" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "行项目" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "为收到的物品选择目的地位置" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "输入入库项目的批号" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "输入入库库存项的有效期" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "输入入库库存项目的序列号" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "覆盖传入库存项目的包装资料" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "传入库存项目的附加说明" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "条形码" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "扫描条形码" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "条形码已被使用" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "必须提供行项目" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "必须指定目标位置" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "提供的条形码值必须是唯一的" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "配送" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "已分配的行" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "售出价格货币" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "已分配的项目" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "未提供装运详细信息" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "行项目与此订单不关联" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "数量必须为正" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "该库存项未通过所有必要的测试" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "输入要分配的序列号" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "货物已发出" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "发货与此订单无关" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "未找到以下序列号的匹配项" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "以下序列号不可用" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "退货订单行项目" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "行项目与退货订单不匹配" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "行项目已收到" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "只能根据正在进行的订单接收物品" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "退货数量" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "行价格货币" @@ -5758,59 +5831,63 @@ msgstr "是修订版本" msgid "Has Revisions" msgstr "有修订版本" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "物料清单合规" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "级联分类" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "如果为真,则包含给定分类下的所有子分类中的项目" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "按数字分类ID或字面值 \"null\" 进行筛选" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "装配零件已启用" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "装配零件可追踪" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "装配部份是可测试的" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "装配零件已锁定" + +#: part/api.py:1316 msgid "Component part is active" msgstr "元器件已激活" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "该零部件可追溯" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "组件部份是可测试的" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "该零部件是一个装配件" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "该零部件为虚拟件" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "有可用库存" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "使用" @@ -5823,7 +5900,7 @@ msgstr "零件类别" msgid "Part Categories" msgstr "零件类别" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "默认位置" @@ -5851,7 +5928,7 @@ msgstr "此类别零件的默认关键字" msgid "Icon" msgstr "图标" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "图标(可选)" @@ -5872,984 +5949,1012 @@ msgstr "默认值" msgid "Default Parameter Value" msgstr "默认参数值" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "零件" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "无法删除已锁定零件的参数" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "无法修改已锁定零件的参数" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "无法删除这个零件,因为它已被锁定" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "无法删除这个零件,因为它仍然处于活动状态" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "无法删除这个零件,因为它被使用在了装配中" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "零件 \"{self}\" 不能用在 \"{parent}\" 的物料清单 (递归)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "零件 \"{parent}\" 被使用在了 \"{self}\" 的物料清单 (递归)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "内部零件号必须匹配正则表达式 {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "零件不能是对自身的修订" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "标记为带版本管理的物料必须指定版本代码" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "修订仅对装配零件允许" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "无法对模版零件进行修订" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "上级零件必须指向相同的模版" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "该序列号库存项己存在" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "在零件设置中不允许重复的内部零件号" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "重复的零件修订版本已经存在。" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "有这个名字,内部零件号,和修订版本的零件已经存在" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "零件不能分配到结构性零件类别!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "零件名称" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "是模板" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "这个零件是一个模版零件吗?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "这个零件是另一零件的变体吗?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "变体" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "零件描述(可选)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "关键词" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索结果可见性的零件关键字" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "零件类别" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "内部零件号 IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "零件修订版本或版本号" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "版本" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "这零件是另一零件的修订版本吗?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "修订版本" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "该物品通常存放在哪里?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "默认到期" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "此零件库存项的过期时间 (天)" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "最低库存" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "允许的最小库存量" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "最大库存" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "最大允许库存水平" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "此零件的计量单位" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "这个零件可由其他零件加工而成吗?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "这个零件可用于创建其他零件吗?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "此零件是否有唯一物品的追踪功能" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "这一部件能否记录到测试结果?" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "这个零件可从外部供应商购买吗?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "此零件可以销售给客户吗?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "这个零件是否已激活?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "无法编辑锁定的零件" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "这是一个虚拟零件,例如一个软件产品或许可证吗?" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "物料清单已验证" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "该零件的物料清单是否通过验证?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "物料清单校验和" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "保存的物料清单校验和" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "物料清单检查人" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "物料清单检查日期" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "此零件的负责人" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "出售多个" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "用于缓存定价计算的货币" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "最低物料清单成本" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "物料清单的最高成本" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "最低购买成本" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "最大购买成本" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "最高历史购买成本" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "最低内部价格" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "基于内部批发价的最低成本" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "最大内部价格" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "基于内部批发价的最高成本" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "供应商最低价格" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "外部供应商零件的最低价格" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "供应商最高价格" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "来自外部供应商的商零件的最高价格" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "最小变体成本" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "计算出的变体零件的最低成本" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "最大变体成本" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "计算出的变体零件的最大成本" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "覆盖最低成本" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "覆盖最大成本" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "计算总最低成本" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "计算总最大成本" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "最低售出价格" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "基于批发价的最低售出价格" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "最高售出价格" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "基于批发价的最大售出价格" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "最低销售成本" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "历史最低售出价格" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "最高销售成本" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "历史最高售出价格" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "用于盘点的零件" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "物品数量" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "盘点时的个别库存条目数" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "盘点时可用库存总额" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "日期" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "进行盘点的日期" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "最低库存成本" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "现有存库存最低成本估算" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "最高库存成本" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "目前库存最高成本估算" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "零件售出价格折扣" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "零件测试模板" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名称无效 - 必须包含至少一个字母或者数字" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "测试模板只能为可拆分的部件创建" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主键的测试模板" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "测试名" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "输入测试的名称" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "测试主键" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "简化测试主键" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "测试说明" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "输入测试的描述" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "此测试是否已启用?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "必须的" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "需要此测试才能通过吗?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "添加测试结果时是否需要一个值?" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加测试结果时是否需要文件附件?" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "此测试的有效选择 (逗号分隔)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "数量无效 - 未指定零件的单位" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "数量必须大于或等于零" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清单项目不能被修改 - 装配已锁定" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清单项目不能修改 - 变体装配已锁定" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "选择父零件" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "子零件" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "选择要用于物料清单的零件" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "数量" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "生产一个部件所消耗的子零件数量" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "此物料清单项目的数量" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "此物料清单项目是可选的" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "这个物料清单项目是耗材 (它没有在生产订单中被追踪)" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "设置数量" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "为补偿生产准备损耗所需的额外数量" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "损耗" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "生产预估损耗率(百分比,0-100)" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "舍入倍数" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "将所需生产数量向上舍入至该值的最接近倍数" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "物料清单项目引用" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "物料清单项目注释" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "校验和" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "物料清单行校验和" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "已验证" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "此物料清单项目已验证" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "获取继承的" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清单项目是由物料清单继承的变体零件" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "变体零件的库存项可以用于此物料清单项目" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "可追踪零件的数量必须是整数" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "必须指定子零件" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "物料清单项目替代品" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能与主零件相同" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "上级物料清单项目" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "零件2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "选择相关的零件" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "此关系的注释" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "零件关系不能在零件和自身之间创建" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "复制关系已经存在" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "上级类别" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "上级零件类别" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "子类别" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "结果" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "根据该模板记录的结果数量" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "购买此库存项的货币" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "文件不是一个图片" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "选择要复制的原始零件" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "复制图片" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "从原零件复制图片" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "复制物料清单" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "从原始零件复制材料清单" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "从原始零件复制参数数据" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "复制备注" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "从原始零件复制备注" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "复制测试" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "从原始零件复制测试模板" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "初始化库存数量" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始库存数量。如果数量为零,则不添加任何库存。" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "初始化库存地点" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的库存地点" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "选择供应商(或为空以跳过)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "选择制造商(或为空)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "制造商零件号" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "所选公司不是一个有效的供应商" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "所选公司不是一个有效的制造商" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "与此制造商零件编号 (MPN) 的相匹配的制造商零件已存在" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "匹配此库存单位 (SKU) 的供应商零件已存在" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "类别名称" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "正在生产" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "目前正在生产的零件数量" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件计划待产数量" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "库存项" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "修订" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "库存总量" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "未分配的库存" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "变体库存" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "重复零件" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "从另一个零件复制初始数据" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "初始库存" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "创建具有初始库存数量的零件" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "供应商信息" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供应商信息" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "复制类别参数" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "从选择的零件复制参数模版" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "现有的图片" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "现有零件图片的文件名" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "图片不存在" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "验证整个物料清单" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "可以创建" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "生产订单必填项" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "分配到生产订单" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "销售订单必填项" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "分配到销售订单" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "内部零件号" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "零件描述" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "选择一个物料,以生成该物料(及其所有变型物料)的盘点信息" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "选择一个分类,以包含该分类(及其子分类)下的所有物料" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "选择一个库位,以包含该库位(含子库位)中有库存的所有物料" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "生成盘点条目" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "保存所选物料的盘点条目" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "生成报告" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "为所选物料生成盘点报告" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "最低价格" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "覆盖已计算的最低价格值" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "最低价格货币" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "最高价格" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "覆盖已计算的最高价格值" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "最高价格货币" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "更新" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "更新这个零件的价格" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "无法将所提供的货币转换为 {default_currency}" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "最低价格不能高于最高价格。" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "最高价格不能低于最低价格" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" -msgstr "数量必须大于或等于零" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" +msgstr "此商品所需数量(可包含单位)" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "选择父装配" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "选择零部件" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "无效的数量格式" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "选择要复制物料清单的零件" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "移除现有数据" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "复制前删除现有的物料清单项目" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "包含继承的" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "包含从模板零件继承的物料清单项目" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "跳过无效行" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "启用此选项以跳过无效行" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "复制替代品零件" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "复制物料清单项目时复制替代品零件" @@ -7101,15 +7206,15 @@ msgstr "待分配数" msgid "Label printing failed" msgstr "标签打印失败" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "渲染标签到 PDF 时出错" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "渲染标签到 HTML 时出错" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "没有要打印的项目" @@ -7170,7 +7275,7 @@ msgstr "提供条形码本地支持" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7516,20 +7621,20 @@ msgstr "零件变更通知" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "零件 `{part.name}`已触发 `{part_action}`事件" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF 标签打印机" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "为打印 PDF 标签提供本机支持" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Debug模式" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "启用Debug模式 - 返回原始的 HTML 而不是 PDF" @@ -7570,7 +7675,7 @@ msgstr "边框" msgid "Print a border around each label" msgstr "打印每个标签的边框" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "横屏模式" @@ -8031,7 +8136,7 @@ msgstr "插件不支持标签打印" msgid "Invalid label dimensions" msgstr "无效的标签尺寸" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "没有有效的项目提供到模板" @@ -8075,118 +8180,118 @@ msgstr "打印时附加到模型" msgid "Save report output as an attachment against linked model instance when printing" msgstr "打印时将报告输出保存为附件与链接模型实例" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "文件名样式" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "生成文件名模式" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "模板已启用" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "模版的目标模型类型" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "筛选器" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "模版查询筛选器 (逗号分隔的键值对列表)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "模板包文件" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "PDF 报告的页面大小" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "横向渲染报告" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "合并" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "针对选定项目生成独立报" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "基于模板 {self.name} 生成的报告" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "模板语法错误" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "报告渲染错误" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "报告生成错误" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "报告合并输出错误" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "宽度 [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "标签宽度,以毫米为单位。" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "高度 [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "标签高度,以毫米为单位。" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "标签打印错误" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "代码片段" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "报告代码片段文件" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "代码片段文件描述" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "资产" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "报告资产文件" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "资产文件描述" #: report/serializers.py:37 msgid "User must be authenticated to save report templates" -msgstr "" +msgstr "用户必须通过身份验证才能保存报告模板" #: report/serializers.py:118 msgid "Select report template" @@ -8277,7 +8382,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "序列号" @@ -8540,7 +8645,7 @@ msgstr "库存地点类型" msgid "Default icon for all locations that have no icon set (optional)" msgstr "为所有没有图标的位置设置默认图标(可选)" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "库存地点" @@ -8548,11 +8653,11 @@ msgstr "库存地点" msgid "Stock Locations" msgstr "库存地点" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "所有者" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "选择所有者" @@ -8560,7 +8665,7 @@ msgstr "选择所有者" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "库存项可能不直接位于结构库存地点,但可能位于其子地点。" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "外部" @@ -8580,274 +8685,282 @@ msgstr "该位置的库存地点类型" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "您不能将此库存地点设置为结构性,因为某些库存项已经位于它!" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "序列化库存商品无法删除" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "{field} 不存在" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "必须指定零件" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "库存项不能存放在结构性库存地点!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "无法为虚拟零件创建库存项" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "零件类型 ('{self.supplier_part.part}') 必须为 {self.part}" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "有序列号的项目的数量必须是1" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "如果数量大于1,则不能设置序列号" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "项目不能属于其自身" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "如果is_building=True,则项必须具有构建引用" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "构建引用未指向同一零件对象" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "父级库存项" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "基础零件" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "为此库存项目选择匹配的供应商零件" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "这个库存物品在哪里?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "包装此库存物品存储在" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "安装于" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "此项目是否安装在另一个项目中?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "此项目的序列号" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "此库存项的批号" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "库存数量" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "源代码构建" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "为此库存项目构建" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "消费者" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "构建消耗此库存项的生产订单" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "采购订单来源" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "此库存商品的采购订单" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "目的地销售订单" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "库存物品的到期日。在此日期之后,库存将被视为过期" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "耗尽时删除" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "当库存耗尽时删除此库存项" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "购买时一个单位的价格" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "转换为零件" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "数量超过可用库存" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "零件未设置为可跟踪" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "数量必须是整数" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "数量不得超过现有库存量 ({self.quantity})" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "必须以列表形式提供序列号" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "数量不匹配序列号" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "无法将库存分配到结构位置" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "测试模板不存在" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "库存项已分配到销售订单" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "库存项已安装在另一个项目中" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "库存项包含其他项目" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "库存项已分配给客户" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "库存项目前正在生产" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "序列化的库存不能合并" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "复制库存项" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "库存项必须指相同零件" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "库存项必须是同一供应商的零件" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "库存状态码必须匹配" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "库存项不能移动,因为它没有库存" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "库存项跟踪" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "条目注释" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "库存项测试结果" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "必须为此测试提供值" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "测试附件必须上传" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "此测试的值无效" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "测试结果" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "测试输出值" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "测验结果附件" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "测试备注" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "测试站" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "进行测试的测试站的标识符" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "已开始" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "测试开始的时间戳" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "已完成" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "测试结束的时间戳" @@ -8931,7 +9044,7 @@ msgstr "输入新项目的序列号" msgid "Supplier Part Number" msgstr "供应商零件编号" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "已过期" @@ -9468,131 +9581,131 @@ msgstr "最近使用令牌的时间" msgid "Revoked" msgstr "撤销" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "权限设置" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "查看" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "查看项目的权限" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "添加" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "添加项目的权限" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "更改" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "编辑项目的权限" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "删除" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "删除项目的权限" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "机器人" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "内部" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "访客" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "语言" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "用户首选语言" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "主题" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Web界面设置为 JSON - 不要手动编辑!" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "小部件" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "设置面板小部件为 JSON - 不要手动编辑!" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "显示名称" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "用户自定义的显示名称" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "职位" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "主要职务或职位" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "用户状态信息" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "用户地址信息" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "用户正在积极使用系统" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "用户首选联系信息" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "用户类型" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "请选择用户类型?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "组织" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "用户主要组织/附属关系" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "主组" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "用户主组" @@ -9602,7 +9715,7 @@ msgstr "管理员" #: users/ruleset.py:30 msgid "Bills of Material" -msgstr "" +msgstr "物料清单" #: users/ruleset.py:34 msgid "Purchase Orders" 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 e3abf65820..5734842f04 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-04-28 02:31+0000\n" -"PO-Revision-Date: 2026-04-28 02:34\n" +"POT-Creation-Date: 2026-05-19 07:07+0000\n" +"PO-Revision-Date: 2026-05-19 07:09\n" "Last-Translator: \n" "Language-Team: Chinese Traditional\n" "Language: zh_TW\n" @@ -89,6 +89,7 @@ msgstr "不能將 {original} 轉換到 {unit}" #: InvenTree/conversion.py:286 InvenTree/conversion.py:300 #: InvenTree/helpers.py:610 order/models.py:747 order/models.py:1042 +#: part/models.py:3946 msgid "Invalid quantity provided" msgstr "提供的數量無效" @@ -104,11 +105,11 @@ msgstr "輸入日期" msgid "Invalid decimal value" msgstr "無效的十進位數值" -#: InvenTree/fields.py:218 InvenTree/models.py:1233 build/serializers.py:505 +#: InvenTree/fields.py:218 InvenTree/models.py:1235 build/serializers.py:505 #: build/serializers.py:576 build/serializers.py:1789 company/models.py:827 -#: order/models.py:1828 +#: order/models.py:1845 #: report/templates/report/inventree_build_order_report.html:172 -#: stock/models.py:2954 stock/models.py:3078 stock/serializers.py:746 +#: stock/models.py:2978 stock/models.py:3102 stock/serializers.py:746 #: stock/serializers.py:922 stock/serializers.py:1064 stock/serializers.py:1411 #: stock/serializers.py:1500 stock/serializers.py:1699 msgid "Notes" @@ -175,39 +176,39 @@ msgstr "無效的 URL:無法解析主機名稱" msgid "URL points to a private or reserved IP address" msgstr "URL 指向私有或保留的 IP 地址" -#: InvenTree/helpers_model.py:195 +#: InvenTree/helpers_model.py:197 msgid "Too many redirects" msgstr "重新導向次數過多" -#: InvenTree/helpers_model.py:200 +#: InvenTree/helpers_model.py:202 msgid "Connection error" msgstr "連接錯誤" -#: InvenTree/helpers_model.py:205 InvenTree/helpers_model.py:214 +#: InvenTree/helpers_model.py:207 InvenTree/helpers_model.py:216 msgid "Server responded with invalid status code" msgstr "服務器響應狀態碼無效" -#: InvenTree/helpers_model.py:210 +#: InvenTree/helpers_model.py:212 msgid "Exception occurred" msgstr "發生異常" -#: InvenTree/helpers_model.py:220 +#: InvenTree/helpers_model.py:222 msgid "Server responded with invalid Content-Length value" msgstr "服務器響應的內容長度值無效" -#: InvenTree/helpers_model.py:223 +#: InvenTree/helpers_model.py:225 msgid "Image size is too large" msgstr "圖片尺寸過大" -#: InvenTree/helpers_model.py:235 +#: InvenTree/helpers_model.py:237 msgid "Image download exceeded maximum size" msgstr "圖片下載超出最大尺寸" -#: InvenTree/helpers_model.py:240 +#: InvenTree/helpers_model.py:242 msgid "Remote server returned empty response" msgstr "遠程服務器返回了空響應" -#: InvenTree/helpers_model.py:248 +#: InvenTree/helpers_model.py:250 msgid "Supplied URL is not a valid image file" msgstr "提供的 URL 不是一個有效的圖片文件" @@ -219,7 +220,7 @@ msgstr "登入此應用程式" msgid "Email" msgstr "電子郵件" -#: InvenTree/middleware.py:183 +#: InvenTree/middleware.py:192 msgid "You must enable two-factor authentication before doing anything else." msgstr "在進行任何其他操作前,必須先啟用雙因素驗證。" @@ -263,124 +264,108 @@ msgstr "參考欄位並須符合格式" msgid "Reference number is too large" msgstr "參考編號過大" -#: InvenTree/models.py:901 +#: InvenTree/models.py:903 msgid "Invalid choice" msgstr "無效的選項" -#: InvenTree/models.py:1022 common/models.py:1438 common/models.py:1865 -#: common/models.py:2126 common/models.py:2251 common/models.py:2548 +#: InvenTree/models.py:1024 common/models.py:1443 common/models.py:1870 +#: common/models.py:2201 common/models.py:2326 common/models.py:2623 #: common/serializers.py:647 generic/states/serializers.py:20 -#: machine/models.py:25 part/models.py:1101 plugin/models.py:54 +#: machine/models.py:25 part/models.py:1102 plugin/models.py:54 #: report/models.py:219 stock/models.py:86 msgid "Name" msgstr "名稱" -#: InvenTree/models.py:1028 build/models.py:265 common/models.py:178 -#: common/models.py:2258 common/models.py:2399 common/models.py:2563 +#: InvenTree/models.py:1030 build/models.py:265 common/models.py:180 +#: common/models.py:2333 common/models.py:2474 common/models.py:2638 #: company/models.py:558 company/models.py:818 order/models.py:447 -#: order/models.py:1873 part/models.py:1124 report/models.py:225 -#: report/models.py:818 report/models.py:844 +#: order/models.py:1890 part/models.py:1125 report/models.py:225 +#: report/models.py:854 report/models.py:880 #: report/templates/report/inventree_build_order_report.html:117 #: stock/models.py:92 msgid "Description" msgstr "描述" -#: InvenTree/models.py:1029 stock/models.py:93 +#: InvenTree/models.py:1031 stock/models.py:93 msgid "Description (optional)" msgstr "描述(選填)" -#: InvenTree/models.py:1044 common/models.py:2869 +#: InvenTree/models.py:1046 common/models.py:2944 msgid "Path" msgstr "路徑" -#: InvenTree/models.py:1149 +#: InvenTree/models.py:1151 msgid "Duplicate names cannot exist under the same parent" msgstr "同一個上層元件下不能有重複的名字" -#: InvenTree/models.py:1233 +#: InvenTree/models.py:1235 msgid "Markdown notes (optional)" msgstr "Markdown 註記(選填)" -#: InvenTree/models.py:1264 +#: InvenTree/models.py:1266 msgid "Barcode Data" msgstr "條碼資料" -#: InvenTree/models.py:1265 +#: InvenTree/models.py:1267 msgid "Third party barcode data" msgstr "第三方條碼資料" -#: InvenTree/models.py:1271 +#: InvenTree/models.py:1273 msgid "Barcode Hash" msgstr "條碼雜湊值" -#: InvenTree/models.py:1272 +#: InvenTree/models.py:1274 msgid "Unique hash of barcode data" msgstr "條碼資料的唯一雜湊值" -#: InvenTree/models.py:1353 +#: InvenTree/models.py:1355 msgid "Existing barcode found" msgstr "發現現有條碼" -#: InvenTree/models.py:1453 +#: InvenTree/models.py:1455 msgid "Server Error" msgstr "伺服器錯誤" -#: InvenTree/models.py:1454 +#: InvenTree/models.py:1456 msgid "An error has been logged by the server." msgstr "伺服器紀錄了一個錯誤。" -#: InvenTree/models.py:1496 common/models.py:1776 +#: InvenTree/models.py:1498 common/models.py:1781 #: 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:361 part/models.py:4182 +#: InvenTree/serializers.py:363 msgid "Must be a valid number" msgstr "必須是有效的數字" -#: InvenTree/serializers.py:403 company/models.py:217 part/models.py:3316 +#: InvenTree/serializers.py:405 company/models.py:217 part/models.py:3326 msgid "Currency" msgstr "貨幣" -#: InvenTree/serializers.py:406 part/serializers.py:1387 +#: InvenTree/serializers.py:408 part/serializers.py:1376 msgid "Select currency from available options" msgstr "從可用選項中選擇貨幣" -#: InvenTree/serializers.py:756 +#: InvenTree/serializers.py:758 msgid "This field may not be null." msgstr "此欄位不可為空白。" -#: InvenTree/serializers.py:762 +#: InvenTree/serializers.py:764 msgid "Invalid value" msgstr "無效值" -#: InvenTree/serializers.py:799 -msgid "Remote Image" -msgstr "遠程圖片" - -#: InvenTree/serializers.py:800 -msgid "URL of remote image file" -msgstr "遠程圖片文件的 URL" - -#: InvenTree/serializers.py:818 -msgid "Downloading images from remote URL is not enabled" -msgstr "未啓用從遠程 URL下載圖片" - -#: InvenTree/serializers.py:825 -msgid "Failed to download image from remote URL" -msgstr "從遠程URL下載圖像失敗" - -#: InvenTree/serializers.py:908 +#: InvenTree/serializers.py:865 msgid "Invalid content type format" msgstr "不合規的內容類型格式" -#: InvenTree/serializers.py:911 +#: InvenTree/serializers.py:868 msgid "Content type not found" msgstr "內容類型未發現" -#: InvenTree/serializers.py:917 +#: InvenTree/serializers.py:874 msgid "Content type does not match required mixin class" msgstr "內容類型與所需的 mixin 類別不符" @@ -552,8 +537,8 @@ msgstr "無效的物理單位" msgid "Not a valid currency code" msgstr "無效的貨幣代碼" -#: build/api.py:55 order/api.py:114 order/api.py:281 order/api.py:1384 -#: order/serializers.py:123 +#: build/api.py:55 order/api.py:116 order/api.py:283 order/api.py:1386 +#: order/serializers.py:124 msgid "Order Status" msgstr "訂單狀態" @@ -561,21 +546,21 @@ msgstr "訂單狀態" msgid "Parent Build" msgstr "上層生產工單" -#: build/api.py:85 build/api.py:918 order/api.py:558 order/api.py:783 -#: order/api.py:1185 order/api.py:1486 stock/api.py:572 +#: build/api.py:85 build/api.py:918 order/api.py:560 order/api.py:785 +#: order/api.py:1187 order/api.py:1488 stock/api.py:572 msgid "Include Variants" msgstr "包含變體" #: build/api.py:101 build/api.py:475 build/api.py:932 build/models.py:283 #: build/serializers.py:1214 build/serializers.py:1390 -#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:447 -#: order/api.py:309 order/api.py:313 order/api.py:940 order/api.py:1198 -#: order/api.py:1201 order/models.py:1991 order/models.py:2159 -#: order/models.py:2160 part/api.py:1133 part/api.py:1136 part/api.py:1349 -#: part/models.py:527 part/models.py:3327 part/models.py:3470 -#: part/models.py:3528 part/models.py:3549 part/models.py:3571 -#: part/models.py:3712 part/models.py:3977 part/models.py:4398 -#: part/serializers.py:1336 part/serializers.py:1990 +#: build/serializers.py:1483 company/models.py:1037 company/serializers.py:420 +#: order/api.py:311 order/api.py:315 order/api.py:942 order/api.py:1200 +#: order/api.py:1203 order/models.py:2022 order/models.py:2190 +#: order/models.py:2191 part/api.py:1151 part/api.py:1154 part/api.py:1371 +#: part/models.py:528 part/models.py:3337 part/models.py:3480 +#: part/models.py:3538 part/models.py:3559 part/models.py:3581 +#: part/models.py:3722 part/models.py:4039 part/models.py:4466 +#: part/serializers.py:1325 part/serializers.py:1988 #: 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 @@ -595,9 +580,9 @@ msgstr "包含變體" msgid "Part" msgstr "零件" -#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:968 -#: part/api.py:1360 part/models.py:412 part/models.py:1142 part/models.py:3599 -#: part/serializers.py:1346 part/serializers.py:1783 stock/api.py:868 +#: build/api.py:121 build/api.py:124 build/serializers.py:1497 part/api.py:985 +#: part/api.py:1382 part/models.py:412 part/models.py:1143 part/models.py:3609 +#: part/serializers.py:1335 part/serializers.py:1760 stock/api.py:868 msgid "Category" msgstr "類別" @@ -605,7 +590,7 @@ msgstr "類別" msgid "Ancestor Build" msgstr "可測試部分" -#: build/api.py:153 order/api.py:132 +#: build/api.py:153 order/api.py:134 msgid "Assigned to me" msgstr "分配給我" @@ -653,11 +638,11 @@ msgstr "完成於之前" msgid "Completed after" msgstr "完成於之後" -#: build/api.py:250 order/api.py:237 +#: build/api.py:250 order/api.py:239 msgid "Min Date" msgstr "最小日期" -#: build/api.py:273 order/api.py:256 +#: build/api.py:273 order/api.py:258 msgid "Max Date" msgstr "最大日期" @@ -669,16 +654,16 @@ msgstr "排除樹" msgid "Build must be cancelled before it can be deleted" msgstr "工單必須被取消才能被刪除" -#: build/api.py:458 build/serializers.py:1424 part/models.py:4011 +#: build/api.py:458 build/serializers.py:1424 part/models.py:4081 msgid "Consumable" msgstr "耗材" -#: build/api.py:461 build/serializers.py:1427 part/models.py:4005 +#: build/api.py:461 build/serializers.py:1427 part/models.py:4075 msgid "Optional" msgstr "非必須項目" -#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:483 -#: part/models.py:1247 part/serializers.py:1728 part/serializers.py:1754 +#: build/api.py:464 build/serializers.py:1469 common/setting/system.py:463 +#: part/models.py:1257 part/serializers.py:1705 part/serializers.py:1731 #: stock/api.py:638 msgid "Assembly" msgstr "裝配" @@ -687,32 +672,32 @@ msgstr "裝配" msgid "Tracked" msgstr "追蹤中" -#: build/api.py:470 build/serializers.py:1430 part/models.py:1265 +#: build/api.py:470 build/serializers.py:1430 part/models.py:1275 msgid "Testable" msgstr "可測試" -#: build/api.py:480 order/api.py:1004 order/api.py:1374 +#: build/api.py:480 order/api.py:1006 order/api.py:1376 msgid "Order Outstanding" msgstr "訂單未完成" -#: build/api.py:490 build/serializers.py:1526 order/api.py:963 +#: build/api.py:490 build/serializers.py:1526 order/api.py:965 msgid "Allocated" msgstr "已分配" -#: build/api.py:499 build/models.py:1794 build/serializers.py:1443 +#: build/api.py:499 build/models.py:1796 build/serializers.py:1443 msgid "Consumed" msgstr "已消耗" -#: build/api.py:508 company/models.py:882 company/serializers.py:424 +#: build/api.py:508 company/models.py:882 company/serializers.py:397 #: 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:532 build/serializers.py:1528 company/serializers.py:421 -#: order/serializers.py:1343 part/serializers.py:861 part/serializers.py:1197 -#: part/serializers.py:1792 +#: build/api.py:532 build/serializers.py:1528 company/serializers.py:394 +#: order/serializers.py:1344 part/serializers.py:858 part/serializers.py:1186 +#: part/serializers.py:1769 msgid "On Order" msgstr "已訂購" @@ -720,7 +705,7 @@ msgstr "已訂購" msgid "Build not found" msgstr "找不到生產記錄" -#: build/api.py:955 build/models.py:120 order/models.py:2024 +#: build/api.py:955 build/models.py:120 order/models.py:2055 #: 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 @@ -729,17 +714,17 @@ msgstr "生產工單" #: build/api.py:969 build/api.py:973 build/serializers.py:368 #: build/serializers.py:493 build/serializers.py:563 build/serializers.py:1264 -#: build/serializers.py:1270 order/api.py:1245 order/api.py:1250 -#: order/serializers.py:845 order/serializers.py:985 order/serializers.py:2139 -#: part/serializers.py:1356 stock/api.py:986 stock/serializers.py:111 +#: build/serializers.py:1270 order/api.py:1247 order/api.py:1252 +#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2159 +#: part/serializers.py:1345 stock/api.py:986 stock/serializers.py:111 #: stock/serializers.py:619 stock/serializers.py:739 stock/serializers.py:917 #: stock/serializers.py:1493 stock/serializers.py:1814 #: stock/serializers.py:1863 templates/email/stale_stock_notification.html:18 -#: users/models.py:549 +#: users/models.py:547 msgid "Location" msgstr "地點" -#: build/api.py:981 part/serializers.py:1381 +#: build/api.py:981 part/serializers.py:1370 msgid "Output" msgstr "產出" @@ -784,8 +769,8 @@ msgid "Build Order Reference" msgstr "生產工單代號" #: build/models.py:259 build/serializers.py:1421 order/models.py:641 -#: order/models.py:1350 order/models.py:1821 order/models.py:2764 -#: part/models.py:4051 +#: order/models.py:1354 order/models.py:1838 order/models.py:2795 +#: part/models.py:4121 #: 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 @@ -861,8 +846,8 @@ msgstr "生產狀態" msgid "Build status code" msgstr "生產狀態代碼" -#: build/models.py:356 build/serializers.py:355 order/serializers.py:861 -#: stock/models.py:1107 stock/serializers.py:85 stock/serializers.py:1666 +#: build/models.py:356 build/serializers.py:355 order/serializers.py:862 +#: stock/models.py:1131 stock/serializers.py:85 stock/serializers.py:1666 msgid "Batch Code" msgstr "批號" @@ -870,8 +855,8 @@ msgstr "批號" msgid "Batch code for this build output" msgstr "此產出的批號" -#: build/models.py:364 order/models.py:484 order/serializers.py:178 -#: part/models.py:1328 +#: build/models.py:364 order/models.py:484 order/serializers.py:179 +#: part/models.py:1338 msgid "Creation Date" msgstr "建立日期" @@ -891,7 +876,7 @@ msgstr "目標完成日期" msgid "Target date for build completion. Build will be overdue after this date." msgstr "生產的預計完成日期。若超過此日期則工單會逾期。" -#: build/models.py:384 order/models.py:694 order/models.py:2803 +#: build/models.py:384 order/models.py:694 order/models.py:2834 msgid "Completion Date" msgstr "完成日期" @@ -907,8 +892,8 @@ msgstr "發布者" msgid "User who issued this build order" msgstr "發布此生產工單的使用者" -#: build/models.py:419 common/models.py:187 order/api.py:182 -#: order/models.py:516 part/models.py:1345 +#: build/models.py:419 common/models.py:189 order/api.py:184 +#: order/models.py:516 part/models.py:1355 #: report/templates/report/inventree_build_order_report.html:158 msgid "Responsible" msgstr "負責人" @@ -917,12 +902,12 @@ msgstr "負責人" msgid "User or group responsible for this build order" msgstr "負責此生產工單的使用者或羣組" -#: build/models.py:425 stock/models.py:1100 +#: build/models.py:425 stock/models.py:1124 msgid "External Link" msgstr "外部連結" -#: build/models.py:427 common/models.py:2014 part/models.py:1176 -#: stock/models.py:1102 +#: build/models.py:427 common/models.py:2089 part/models.py:1177 +#: stock/models.py:1126 msgid "Link to external URL" msgstr "外部URL連結" @@ -934,8 +919,8 @@ msgstr "製造優先度" msgid "Priority of this build order" msgstr "此生產工單的優先程度" -#: build/models.py:443 common/models.py:157 common/models.py:171 -#: order/api.py:168 order/models.py:456 order/models.py:1853 +#: build/models.py:443 common/models.py:159 common/models.py:173 +#: order/api.py:170 order/models.py:456 order/models.py:1870 msgid "Project Code" msgstr "專案代碼" @@ -968,7 +953,7 @@ msgstr "一張生產工單已經完成" msgid "Serial numbers must be provided for trackable parts" msgstr "對於可跟蹤的零件,必須提供序列號" -#: build/models.py:1024 build/models.py:1111 +#: build/models.py:1024 build/models.py:1113 msgid "No build output specified" msgstr "未指定產出" @@ -980,47 +965,47 @@ msgstr "產出已完成" msgid "Build output does not match Build Order" msgstr "產出與生產訂單不匹配" -#: build/models.py:1118 build/models.py:1224 build/serializers.py:281 +#: build/models.py:1120 build/models.py:1226 build/serializers.py:281 #: build/serializers.py:331 build/serializers.py:961 build/serializers.py:1740 -#: order/models.py:744 order/serializers.py:631 order/serializers.py:856 -#: part/serializers.py:1721 stock/models.py:947 stock/models.py:1437 -#: stock/models.py:1902 stock/serializers.py:717 stock/serializers.py:1655 +#: order/models.py:744 order/serializers.py:632 order/serializers.py:857 +#: part/models.py:3934 stock/models.py:971 stock/models.py:1461 +#: stock/models.py:1926 stock/serializers.py:717 stock/serializers.py:1655 msgid "Quantity must be greater than zero" msgstr "數量必須大於零" -#: build/models.py:1122 build/models.py:1229 build/serializers.py:286 +#: build/models.py:1124 build/models.py:1231 build/serializers.py:286 msgid "Quantity cannot be greater than the output quantity" msgstr "數量不能大於輸出數量" -#: build/models.py:1197 build/serializers.py:602 +#: build/models.py:1199 build/serializers.py:602 msgid "Build output has not passed all required tests" msgstr "此產出尚未通過所有必要測試" -#: build/models.py:1200 build/serializers.py:597 +#: build/models.py:1202 build/serializers.py:597 #, python-brace-format msgid "Build output {serial} has not passed all required tests" msgstr "產出 {serial} 未通過所有必要測試" -#: build/models.py:1211 +#: build/models.py:1213 msgid "Allocated stock items are still in production" msgstr "已分配的庫存項目仍在生產中" -#: build/models.py:1219 +#: build/models.py:1221 msgid "Cannot partially complete a build output with allocated items" msgstr "無法部分完成具有已分配項目的生產產出" -#: build/models.py:1748 +#: build/models.py:1750 msgid "Build Order Line Item" msgstr "生產訂單行項目" -#: build/models.py:1773 +#: build/models.py:1775 msgid "Build object" msgstr "生產對象" -#: build/models.py:1785 build/models.py:2110 build/serializers.py:267 -#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1368 -#: order/models.py:1795 order/models.py:2647 order/serializers.py:1783 -#: order/serializers.py:2232 part/models.py:3484 part/models.py:3999 +#: build/models.py:1787 build/models.py:2112 build/serializers.py:267 +#: build/serializers.py:316 build/serializers.py:1442 common/models.py:1373 +#: order/models.py:1810 order/models.py:2678 order/serializers.py:1793 +#: order/serializers.py:2252 part/models.py:3494 part/models.py:4069 #: 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 @@ -1038,60 +1023,60 @@ msgstr "生產對象" msgid "Quantity" msgstr "數量" -#: build/models.py:1786 +#: build/models.py:1788 msgid "Required quantity for build order" msgstr "生產工單所需數量" -#: build/models.py:1795 +#: build/models.py:1797 msgid "Quantity of consumed stock" msgstr "已消耗庫存數量" -#: build/models.py:1896 +#: build/models.py:1898 msgid "Build item must specify a build output, as master part is marked as trackable" msgstr "生產項必須指定產出,因為主零件已經被標記為可追蹤的" -#: build/models.py:1959 +#: build/models.py:1961 msgid "Selected stock item does not match BOM line" msgstr "選擇的庫存品項和BOM的項目不符" -#: build/models.py:1978 +#: build/models.py:1980 msgid "Allocated quantity must be greater than zero" msgstr "分配數量必須大於零" -#: build/models.py:1984 +#: build/models.py:1986 msgid "Quantity must be 1 for serialized stock" msgstr "有序號的品項數量必須為1" -#: build/models.py:1994 +#: build/models.py:1996 #, python-brace-format msgid "Allocated quantity ({q}) must not exceed available stock quantity ({a})" msgstr "分配的數量({q})不能超過可用的庫存數量({a})" -#: build/models.py:2011 order/models.py:2596 +#: build/models.py:2013 order/models.py:2627 msgid "Stock item is over-allocated" msgstr "庫存品項超額分配" -#: build/models.py:2100 build/serializers.py:944 build/serializers.py:1231 -#: order/serializers.py:1620 order/serializers.py:1641 +#: build/models.py:2102 build/serializers.py:944 build/serializers.py:1231 +#: order/serializers.py:1621 order/serializers.py:1642 #: report/templates/report/inventree_sales_order_shipment_report.html:29 #: stock/api.py:1417 stock/models.py:445 stock/serializers.py:102 #: stock/serializers.py:829 stock/serializers.py:1349 stock/serializers.py:1461 msgid "Stock Item" msgstr "庫存品項" -#: build/models.py:2101 +#: build/models.py:2103 msgid "Source stock item" msgstr "來源庫存項目" -#: build/models.py:2111 +#: build/models.py:2113 msgid "Stock quantity to allocate to build" msgstr "要分配的庫存數量" -#: build/models.py:2120 +#: build/models.py:2122 msgid "Install into" msgstr "安裝到" -#: build/models.py:2121 +#: build/models.py:2123 msgid "Destination stock item" msgstr "目的庫存品項" @@ -1099,7 +1084,7 @@ msgstr "目的庫存品項" msgid "Build Level" msgstr "構建等級" -#: build/serializers.py:130 part/serializers.py:1283 +#: build/serializers.py:130 part/serializers.py:1272 msgid "Part Name" msgstr "零件名稱" @@ -1135,7 +1120,7 @@ msgstr "可追蹤的零件數量必須為整數" msgid "Integer quantity required, as the bill of materials contains trackable parts" msgstr "因為BOM包含可追蹤的零件,所以數量必須為整數" -#: build/serializers.py:362 order/serializers.py:877 order/serializers.py:1787 +#: build/serializers.py:362 order/serializers.py:878 order/serializers.py:1797 #: stock/serializers.py:728 msgid "Serial Numbers" msgstr "序號" @@ -1156,8 +1141,8 @@ msgstr "自動分配序號" msgid "Automatically allocate required items with matching serial numbers" msgstr "自動為需要項目分配對應的序號" -#: build/serializers.py:419 order/serializers.py:963 stock/api.py:1186 -#: stock/models.py:1925 +#: build/serializers.py:419 order/serializers.py:964 stock/api.py:1186 +#: stock/models.py:1949 msgid "The following serial numbers already exist or are invalid" msgstr "序號已存在或無效" @@ -1245,7 +1230,7 @@ msgstr "接受庫存項未被完全分配至生產訂單" msgid "Required stock has not been fully allocated" msgstr "所需庫存尚未完全分配" -#: build/serializers.py:799 order/serializers.py:507 order/serializers.py:1688 +#: build/serializers.py:799 order/serializers.py:508 order/serializers.py:1698 msgid "Accept Incomplete" msgstr "接受不完整" @@ -1293,7 +1278,7 @@ msgstr "bom_item.part 必須與生產訂單零件相同" msgid "Item must be in stock" msgstr "商品必須有庫存" -#: build/serializers.py:993 order/serializers.py:1674 +#: build/serializers.py:993 order/serializers.py:1684 #, python-brace-format msgid "Available quantity ({q}) exceeded" msgstr "可用量 ({q}) 超出限制" @@ -1306,7 +1291,7 @@ msgstr "對於被追蹤的零件的分配,必須指定生產產出" msgid "Build output cannot be specified for allocation of untracked parts" msgstr "對於未被追蹤的零件,無法指定生產產出" -#: build/serializers.py:1031 order/serializers.py:1947 +#: build/serializers.py:1031 order/serializers.py:1967 msgid "Allocation items must be provided" msgstr "必須提供分配項目" @@ -1386,9 +1371,9 @@ msgstr "安裝至" msgid "Build" msgstr "生產" -#: build/serializers.py:1302 company/models.py:638 order/api.py:322 -#: order/api.py:327 order/api.py:554 order/serializers.py:623 -#: stock/models.py:1043 stock/serializers.py:586 +#: build/serializers.py:1302 company/models.py:638 order/api.py:324 +#: order/api.py:329 order/api.py:556 order/serializers.py:624 +#: stock/models.py:1067 stock/serializers.py:586 msgid "Supplier Part" msgstr "供應商零件" @@ -1404,7 +1389,7 @@ msgstr "構建參考" msgid "Part Category Name" msgstr "零件類別名稱" -#: build/serializers.py:1433 common/setting/system.py:507 part/models.py:1259 +#: build/serializers.py:1433 common/setting/system.py:487 part/models.py:1269 msgid "Trackable" msgstr "可追蹤" @@ -1412,29 +1397,29 @@ msgstr "可追蹤" msgid "Inherited" msgstr "已繼承的" -#: build/serializers.py:1439 part/models.py:4084 +#: build/serializers.py:1439 part/models.py:4154 msgid "Allow Variants" msgstr "允許變體" -#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3802 -#: part/models.py:4390 stock/api.py:881 +#: build/serializers.py:1445 build/serializers.py:1451 part/models.py:3813 +#: part/models.py:4458 stock/api.py:881 msgid "BOM Item" msgstr "物料清單項" -#: build/serializers.py:1529 order/serializers.py:1344 part/serializers.py:1201 -#: part/serializers.py:1796 +#: build/serializers.py:1529 order/serializers.py:1345 part/serializers.py:1190 +#: part/serializers.py:1773 msgid "In Production" msgstr "生產中" -#: build/serializers.py:1531 part/serializers.py:852 part/serializers.py:1205 +#: build/serializers.py:1531 part/serializers.py:849 part/serializers.py:1194 msgid "Scheduled to Build" msgstr "排程生產中" -#: build/serializers.py:1534 part/serializers.py:885 +#: build/serializers.py:1534 part/serializers.py:882 msgid "External Stock" msgstr "外部庫存" -#: build/serializers.py:1535 part/serializers.py:1191 part/serializers.py:1859 +#: build/serializers.py:1535 part/serializers.py:1180 part/serializers.py:1836 msgid "Available Stock" msgstr "可用庫存" @@ -1531,6 +1516,10 @@ msgid "User does not have permission to delete these attachments" msgstr "用户沒有權限刪除此附件" #: common/api.py:790 +msgid "User does not have permission to edit this attachment" +msgstr "" + +#: common/api.py:816 msgid "User does not have permission to delete this attachment" msgstr "用户沒有權限刪除此附件" @@ -1554,610 +1543,634 @@ msgstr "暫無插件" msgid "Project Code Label" msgstr "項目編碼標籤" -#: common/models.py:106 common/models.py:131 common/models.py:3204 +#: common/models.py:108 common/models.py:133 common/models.py:3279 msgid "Updated" msgstr "已是最新" -#: common/models.py:107 common/models.py:132 order/models.py:507 +#: common/models.py:109 common/models.py:134 order/models.py:507 msgid "Timestamp of last update" msgstr "最後更新時間戳" -#: common/models.py:144 +#: common/models.py:146 msgid "Update By" msgstr "更新者" -#: common/models.py:145 +#: common/models.py:147 msgid "User who last updated this object" msgstr "最後更新此物件的使用者" -#: common/models.py:172 +#: common/models.py:174 msgid "Unique project code" msgstr "唯一項目編碼" -#: common/models.py:179 +#: common/models.py:181 msgid "Project description" msgstr "項目描述" -#: common/models.py:188 +#: common/models.py:190 msgid "User or group responsible for this project" msgstr "負責此項目的用户或羣組" -#: common/models.py:784 common/models.py:1300 common/models.py:1338 +#: common/models.py:789 common/models.py:1305 common/models.py:1343 msgid "Settings key" msgstr "設定鍵值" -#: common/models.py:788 +#: common/models.py:793 msgid "Settings value" msgstr "設定值" -#: common/models.py:843 +#: common/models.py:848 msgid "Chosen value is not a valid option" msgstr "所選值不是一個有效的選項" -#: common/models.py:859 +#: common/models.py:864 msgid "Value must be a boolean value" msgstr "該值必須是布爾值" -#: common/models.py:867 +#: common/models.py:872 msgid "Value must be an integer value" msgstr "該值必須為整數" -#: common/models.py:875 +#: common/models.py:880 msgid "Value must be a valid number" msgstr "值必須為有效數字" -#: common/models.py:900 +#: common/models.py:905 msgid "Value does not pass validation checks" msgstr "值未通過驗證檢查" -#: common/models.py:922 +#: common/models.py:927 msgid "Key string must be unique" msgstr "鍵字符串必須是唯一的" -#: 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:2857 -#: importer/models.py:101 part/models.py:3578 part/models.py:3606 +#: common/models.py:1351 common/models.py:1352 common/models.py:1456 +#: common/models.py:1457 common/models.py:1702 common/models.py:1703 +#: common/models.py:2105 common/models.py:2106 common/models.py:2932 +#: importer/models.py:101 part/models.py:3588 part/models.py:3616 #: plugin/models.py:355 plugin/models.py:356 #: report/templates/report/inventree_test_report.html:105 users/models.py:124 -#: users/models.py:501 +#: users/models.py:499 msgid "User" msgstr "使用者" -#: common/models.py:1369 +#: common/models.py:1374 msgid "Price break quantity" msgstr "批發價數量" -#: common/models.py:1376 company/serializers.py:326 order/models.py:1890 -#: order/models.py:3100 +#: common/models.py:1381 company/serializers.py:299 order/models.py:1907 +#: order/models.py:3131 msgid "Price" msgstr "價格" -#: common/models.py:1377 +#: common/models.py:1382 msgid "Unit price at specified quantity" msgstr "指定數量的單位價格" -#: common/models.py:1428 common/models.py:1613 +#: common/models.py:1433 common/models.py:1618 msgid "Endpoint" msgstr "端點" -#: common/models.py:1429 +#: common/models.py:1434 msgid "Endpoint at which this webhook is received" msgstr "接收此網絡鈎子的端點" -#: common/models.py:1439 +#: common/models.py:1444 msgid "Name for this webhook" msgstr "此網絡鈎子的名稱" -#: common/models.py:1443 common/models.py:2271 common/models.py:2406 +#: common/models.py:1448 common/models.py:2346 common/models.py:2481 #: 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:339 users/serializers.py:431 +#: part/models.py:1292 plugin/models.py:69 stock/api.py:641 users/models.py:193 +#: users/models.py:552 users/serializers.py:339 users/serializers.py:431 msgid "Active" msgstr "激活" -#: common/models.py:1443 +#: common/models.py:1448 msgid "Is this webhook active" msgstr "網絡鈎子是否已啓用" -#: common/models.py:1459 users/models.py:172 +#: common/models.py:1464 users/models.py:172 msgid "Token" msgstr "令牌" -#: common/models.py:1460 +#: common/models.py:1465 msgid "Token for access" msgstr "訪問令牌" -#: common/models.py:1468 +#: common/models.py:1473 msgid "Secret" msgstr "密鑰" -#: common/models.py:1469 +#: common/models.py:1474 msgid "Shared secret for HMAC" msgstr "HMAC共享密鑰" -#: common/models.py:1577 common/models.py:3094 +#: common/models.py:1582 common/models.py:3169 msgid "Message ID" msgstr "消息ID" -#: common/models.py:1578 common/models.py:3084 +#: common/models.py:1583 common/models.py:3159 msgid "Unique identifier for this message" msgstr "此郵件的唯一標識符" -#: common/models.py:1586 +#: common/models.py:1591 msgid "Host" msgstr "主機" -#: common/models.py:1587 +#: common/models.py:1592 msgid "Host from which this message was received" msgstr "接收此消息的主機" -#: common/models.py:1595 +#: common/models.py:1600 msgid "Header" msgstr "標題" -#: common/models.py:1596 +#: common/models.py:1601 msgid "Header of this message" msgstr "此消息的標題" -#: common/models.py:1603 +#: common/models.py:1608 msgid "Body" msgstr "正文" -#: common/models.py:1604 +#: common/models.py:1609 msgid "Body of this message" msgstr "此消息的正文" -#: common/models.py:1614 +#: common/models.py:1619 msgid "Endpoint on which this message was received" msgstr "接收此消息的終點" -#: common/models.py:1619 +#: common/models.py:1624 msgid "Worked on" msgstr "工作於" -#: common/models.py:1620 +#: common/models.py:1625 msgid "Was the work on this message finished?" msgstr "這條消息的工作完成了嗎?" -#: common/models.py:1746 +#: common/models.py:1751 msgid "Id" msgstr "標識" -#: common/models.py:1748 +#: common/models.py:1753 msgid "Title" msgstr "標題" -#: common/models.py:1750 common/models.py:2013 company/models.py:188 +#: common/models.py:1755 common/models.py:2088 company/models.py:188 #: company/models.py:479 company/models.py:549 company/models.py:809 -#: order/models.py:462 order/models.py:1834 order/models.py:2395 -#: part/models.py:1175 +#: order/models.py:462 order/models.py:1851 order/models.py:2426 +#: part/models.py:1176 #: report/templates/report/inventree_build_order_report.html:164 msgid "Link" msgstr "連結" -#: common/models.py:1752 +#: common/models.py:1757 msgid "Published" msgstr "已發佈" -#: common/models.py:1754 +#: common/models.py:1759 msgid "Author" msgstr "作者" -#: common/models.py:1756 +#: common/models.py:1761 msgid "Summary" msgstr "摘要" -#: common/models.py:1759 common/models.py:3061 +#: common/models.py:1764 common/models.py:3136 msgid "Read" msgstr "閲讀" -#: common/models.py:1759 +#: common/models.py:1764 msgid "Was this news item read?" msgstr "這條新聞被閲讀了嗎?" -#: common/models.py:1776 +#: common/models.py:1781 msgid "Image file" msgstr "圖像文件" -#: common/models.py:1788 +#: common/models.py:1793 msgid "Target model type for this image" msgstr "此圖像的目標模型類型" -#: common/models.py:1792 +#: common/models.py:1797 msgid "Target model ID for this image" msgstr "此圖像的目標型號ID" -#: common/models.py:1814 +#: common/models.py:1819 msgid "Custom Unit" msgstr "自定義單位" -#: common/models.py:1832 +#: common/models.py:1837 msgid "Unit symbol must be unique" msgstr "單位符號必須唯一" -#: common/models.py:1847 +#: common/models.py:1852 msgid "Unit name must be a valid identifier" msgstr "單位名稱必須是有效的標識符" -#: common/models.py:1866 +#: common/models.py:1871 msgid "Unit name" msgstr "單位名稱" -#: common/models.py:1873 +#: common/models.py:1878 msgid "Symbol" msgstr "符號" -#: common/models.py:1874 +#: common/models.py:1879 msgid "Optional unit symbol" msgstr "可選單位符號" -#: common/models.py:1880 +#: common/models.py:1885 msgid "Definition" msgstr "定義" -#: common/models.py:1881 +#: common/models.py:1886 msgid "Unit definition" msgstr "單位定義" -#: common/models.py:1941 common/models.py:2004 stock/models.py:3073 +#: common/models.py:1946 common/models.py:2079 stock/models.py:3097 #: stock/serializers.py:258 msgid "Attachment" msgstr "附件" -#: common/models.py:1958 +#: common/models.py:1979 msgid "Missing file" msgstr "缺少檔案" -#: common/models.py:1959 +#: common/models.py:1980 msgid "Missing external link" msgstr "缺少外部連結" -#: common/models.py:1996 common/models.py:2542 +#: common/models.py:2019 +msgid "No file attached to rename" +msgstr "" + +#: common/models.py:2022 +msgid "Filename cannot be empty" +msgstr "" + +#: common/models.py:2027 common/models.py:2047 +msgid "Invalid filename" +msgstr "" + +#: common/models.py:2033 +msgid "Cannot change file extension" +msgstr "" + +#: common/models.py:2052 +msgid "A file with this name already exists" +msgstr "" + +#: common/models.py:2059 +msgid "Failed to save renamed file" +msgstr "" + +#: common/models.py:2071 common/models.py:2617 msgid "Model type" msgstr "模型類型" -#: common/models.py:1997 +#: common/models.py:2072 msgid "Target model type for image" msgstr "圖像的目標模型類型" -#: common/models.py:2005 +#: common/models.py:2080 msgid "Select file to attach" msgstr "選擇附件" -#: common/models.py:2021 +#: common/models.py:2096 msgid "Comment" msgstr "註解" -#: common/models.py:2022 +#: common/models.py:2097 msgid "Attachment comment" msgstr "附件評論" -#: common/models.py:2038 +#: common/models.py:2113 msgid "Upload date" msgstr "上傳日期" -#: common/models.py:2039 +#: common/models.py:2114 msgid "Date the file was uploaded" msgstr "上傳文件的日期" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size" msgstr "文件大小" -#: common/models.py:2043 +#: common/models.py:2118 msgid "File size in bytes" msgstr "文件大小,以字節為單位" -#: common/models.py:2081 common/serializers.py:796 +#: common/models.py:2156 common/serializers.py:796 msgid "Invalid model type specified for attachment" msgstr "為附件指定的模型類型無效" -#: common/models.py:2102 +#: common/models.py:2177 msgid "Custom State" msgstr "自定狀態" -#: common/models.py:2103 +#: common/models.py:2178 msgid "Custom States" msgstr "定製狀態" -#: common/models.py:2108 +#: common/models.py:2183 msgid "Reference Status Set" msgstr "參考狀態設定" -#: common/models.py:2109 +#: common/models.py:2184 msgid "Status set that is extended with this custom state" msgstr "使用此自定義狀態擴展狀態的狀態集" -#: common/models.py:2113 generic/states/serializers.py:18 +#: common/models.py:2188 generic/states/serializers.py:18 msgid "Logical Key" msgstr "邏輯密鑰" -#: common/models.py:2115 +#: common/models.py:2190 msgid "State logical key that is equal to this custom state in business logic" msgstr "等同於商業邏輯中自定義狀態的狀態邏輯鍵" -#: common/models.py:2120 common/models.py:2387 machine/serializers.py:27 -#: report/templates/report/inventree_test_report.html:104 stock/models.py:3065 +#: common/models.py:2195 common/models.py:2462 machine/serializers.py:27 +#: report/templates/report/inventree_test_report.html:104 stock/models.py:3089 msgid "Value" msgstr "值" -#: common/models.py:2121 +#: common/models.py:2196 msgid "Numerical value that will be saved in the models database" msgstr "將儲存於模型資料庫中的數值" -#: common/models.py:2127 +#: common/models.py:2202 msgid "Name of the state" msgstr "狀態名" -#: common/models.py:2136 common/models.py:2393 generic/states/serializers.py:22 +#: common/models.py:2211 common/models.py:2468 generic/states/serializers.py:22 msgid "Label" msgstr "標籤" -#: common/models.py:2137 +#: common/models.py:2212 msgid "Label that will be displayed in the frontend" msgstr "在前端顯示的標籤" -#: common/models.py:2144 generic/states/serializers.py:24 +#: common/models.py:2219 generic/states/serializers.py:24 msgid "Color" msgstr "顏色" -#: common/models.py:2145 +#: common/models.py:2220 msgid "Color that will be displayed in the frontend" msgstr "將在前端顯示顏色" -#: common/models.py:2153 +#: common/models.py:2228 msgid "Model" msgstr "模式" -#: common/models.py:2154 +#: common/models.py:2229 msgid "Model this state is associated with" msgstr "該狀態關聯的模型" -#: common/models.py:2169 +#: common/models.py:2244 msgid "Model must be selected" msgstr "必須選定模型" -#: common/models.py:2172 +#: common/models.py:2247 msgid "Key must be selected" msgstr "必須選取密鑰" -#: common/models.py:2175 +#: common/models.py:2250 msgid "Logical key must be selected" msgstr "必須選中邏輯密鑰" -#: common/models.py:2179 +#: common/models.py:2254 msgid "Key must be different from logical key" msgstr "密鑰必須不同於邏輯密鑰" -#: common/models.py:2186 +#: common/models.py:2261 msgid "Valid reference status class must be provided" msgstr "必須提供有效參考狀態類別" -#: common/models.py:2192 +#: common/models.py:2267 msgid "Key must be different from the logical keys of the reference status" msgstr "密鑰必須不同於參考狀態的邏輯密鑰" -#: common/models.py:2199 +#: common/models.py:2274 msgid "Logical key must be in the logical keys of the reference status" msgstr "邏輯密鑰必須在參考狀態的邏輯鍵中" -#: common/models.py:2206 +#: common/models.py:2281 msgid "Name must be different from the names of the reference status" msgstr "名稱必須不同於參考狀態的名稱" -#: common/models.py:2246 common/models.py:2381 common/models.py:2587 +#: common/models.py:2321 common/models.py:2456 common/models.py:2662 msgid "Selection List" msgstr "選擇列表" -#: common/models.py:2247 +#: common/models.py:2322 msgid "Selection Lists" msgstr "選擇列表" -#: common/models.py:2252 +#: common/models.py:2327 msgid "Name of the selection list" msgstr "選擇列表名稱" -#: common/models.py:2259 +#: common/models.py:2334 msgid "Description of the selection list" msgstr "選擇列表描述" -#: common/models.py:2265 part/models.py:1287 +#: common/models.py:2340 part/models.py:1297 msgid "Locked" msgstr "已鎖定" -#: common/models.py:2266 +#: common/models.py:2341 msgid "Is this selection list locked?" msgstr "此選擇列表是否已鎖定?" -#: common/models.py:2272 +#: common/models.py:2347 msgid "Can this selection list be used?" msgstr "此選擇列表是否可使用?" -#: common/models.py:2280 +#: common/models.py:2355 msgid "Source Plugin" msgstr "來源模組" -#: common/models.py:2281 +#: common/models.py:2356 msgid "Plugin which provides the selection list" msgstr "提供此選擇列表的模組" -#: common/models.py:2286 +#: common/models.py:2361 msgid "Source String" msgstr "來源字串" -#: common/models.py:2287 +#: common/models.py:2362 msgid "Optional string identifying the source used for this list" msgstr "用於標示此列表來源的可選字串" -#: common/models.py:2296 +#: common/models.py:2371 msgid "Default Entry" msgstr "預設項目" -#: common/models.py:2297 +#: common/models.py:2372 msgid "Default entry for this selection list" msgstr "此選擇列表的預設項目" -#: common/models.py:2302 common/models.py:3199 +#: common/models.py:2377 common/models.py:3274 msgid "Created" msgstr "已創建" -#: common/models.py:2303 +#: common/models.py:2378 msgid "Date and time that the selection list was created" msgstr "選擇列表建立的日期與時間" -#: common/models.py:2308 +#: common/models.py:2383 msgid "Last Updated" msgstr "最近更新" -#: common/models.py:2309 +#: common/models.py:2384 msgid "Date and time that the selection list was last updated" msgstr "選擇列表最近更新的日期與時間" -#: common/models.py:2371 +#: common/models.py:2446 msgid "Selection List Entry" msgstr "選擇列表項目" -#: common/models.py:2372 +#: common/models.py:2447 msgid "Selection List Entries" msgstr "選擇列表項目" -#: common/models.py:2382 +#: common/models.py:2457 msgid "Selection list to which this entry belongs" msgstr "該項目所屬的選擇列表" -#: common/models.py:2388 +#: common/models.py:2463 msgid "Value of the selection list entry" msgstr "選擇列表項目的值" -#: common/models.py:2394 +#: common/models.py:2469 msgid "Label for the selection list entry" msgstr "選擇列表項目的標籤" -#: common/models.py:2400 +#: common/models.py:2475 msgid "Description of the selection list entry" msgstr "選擇列表項目的描述" -#: common/models.py:2407 +#: common/models.py:2482 msgid "Is this selection list entry active?" msgstr "此選擇列表項目是否啟用?" -#: common/models.py:2441 +#: common/models.py:2516 msgid "Parameter Template" msgstr "參數模板" -#: common/models.py:2442 +#: common/models.py:2517 msgid "Parameter Templates" msgstr "參數範本" -#: common/models.py:2479 +#: common/models.py:2554 msgid "Checkbox parameters cannot have units" msgstr "勾選框參數不能有單位" -#: common/models.py:2484 +#: common/models.py:2559 msgid "Checkbox parameters cannot have choices" msgstr "複選框參數不能有選項" -#: common/models.py:2504 part/models.py:3676 +#: common/models.py:2579 part/models.py:3686 msgid "Choices must be unique" msgstr "選擇必須是唯一的" -#: common/models.py:2521 +#: common/models.py:2596 msgid "Parameter template name must be unique" msgstr "參數模板名稱必須是唯一的" -#: common/models.py:2543 +#: common/models.py:2618 msgid "Target model type for this parameter template" msgstr "此參數範本的目標模型類型" -#: common/models.py:2549 +#: common/models.py:2624 msgid "Parameter Name" msgstr "參數名稱" -#: common/models.py:2555 part/models.py:1240 +#: common/models.py:2630 part/models.py:1250 msgid "Units" msgstr "單位" -#: common/models.py:2556 +#: common/models.py:2631 msgid "Physical units for this parameter" msgstr "此參數的物理單位" -#: common/models.py:2564 +#: common/models.py:2639 msgid "Parameter description" msgstr "參數説明" -#: common/models.py:2570 +#: common/models.py:2645 msgid "Checkbox" msgstr "勾選框" -#: common/models.py:2571 +#: common/models.py:2646 msgid "Is this parameter a checkbox?" msgstr "此參數是否為勾選框?" -#: common/models.py:2576 part/models.py:3763 +#: common/models.py:2651 part/models.py:3773 msgid "Choices" msgstr "選項" -#: common/models.py:2577 +#: common/models.py:2652 msgid "Valid choices for this parameter (comma-separated)" msgstr "此參數的有效選擇 (逗號分隔)" -#: common/models.py:2588 +#: common/models.py:2663 msgid "Selection list for this parameter" msgstr "此參數的選擇清單" -#: common/models.py:2593 part/models.py:3738 report/models.py:290 +#: common/models.py:2668 part/models.py:3748 report/models.py:292 msgid "Enabled" msgstr "已啓用" -#: common/models.py:2594 +#: common/models.py:2669 msgid "Is this parameter template enabled?" msgstr "是否啟用此參數範本?" -#: common/models.py:2635 +#: common/models.py:2710 msgid "Parameter" msgstr "參數" -#: common/models.py:2636 +#: common/models.py:2711 msgid "Parameters" msgstr "參數集" -#: common/models.py:2682 +#: common/models.py:2757 msgid "Invalid choice for parameter value" msgstr "無效的參數值選擇" -#: common/models.py:2752 common/serializers.py:892 +#: common/models.py:2827 common/serializers.py:892 msgid "Invalid model type specified for parameter" msgstr "為參數指定的模型類型無效" -#: common/models.py:2788 +#: common/models.py:2863 msgid "Model ID" msgstr "模型 ID" -#: common/models.py:2789 +#: common/models.py:2864 msgid "ID of the target model for this parameter" msgstr "此參數的目標模型 ID" -#: common/models.py:2798 common/setting/system.py:477 report/models.py:376 -#: report/models.py:672 report/serializers.py:117 report/serializers.py:158 +#: common/models.py:2873 common/setting/system.py:457 report/models.py:378 +#: report/models.py:699 report/serializers.py:117 report/serializers.py:158 #: stock/serializers.py:245 msgid "Template" msgstr "模板" -#: common/models.py:2799 +#: common/models.py:2874 msgid "Parameter template" msgstr "參數範本" -#: common/models.py:2804 common/models.py:2846 importer/models.py:581 +#: common/models.py:2879 common/models.py:2921 importer/models.py:581 msgid "Data" msgstr "數據" -#: common/models.py:2805 +#: common/models.py:2880 msgid "Parameter Value" msgstr "參數值" -#: common/models.py:2814 company/models.py:826 order/serializers.py:895 -#: order/serializers.py:2144 part/models.py:4059 part/models.py:4430 +#: common/models.py:2889 company/models.py:826 order/serializers.py:896 +#: order/serializers.py:2164 part/models.py:4129 part/models.py:4498 #: 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 @@ -2167,181 +2180,181 @@ msgstr "參數值" msgid "Note" msgstr "備註" -#: common/models.py:2815 stock/serializers.py:747 +#: common/models.py:2890 stock/serializers.py:747 msgid "Optional note field" msgstr "可選註釋字段" -#: common/models.py:2842 +#: common/models.py:2917 msgid "Barcode Scan" msgstr "掃描條碼" -#: common/models.py:2847 +#: common/models.py:2922 msgid "Barcode data" msgstr "條碼數據" -#: common/models.py:2858 +#: common/models.py:2933 msgid "User who scanned the barcode" msgstr "掃描條碼" -#: common/models.py:2863 importer/models.py:70 +#: common/models.py:2938 importer/models.py:70 msgid "Timestamp" msgstr "時間戳" -#: common/models.py:2864 +#: common/models.py:2939 msgid "Date and time of the barcode scan" msgstr "掃描條碼的日期和時間" -#: common/models.py:2870 +#: common/models.py:2945 msgid "URL endpoint which processed the barcode" msgstr "處理條碼的 URL 終點" -#: common/models.py:2877 order/models.py:1880 plugin/serializers.py:93 +#: common/models.py:2952 order/models.py:1897 plugin/serializers.py:93 msgid "Context" msgstr "上下文" -#: common/models.py:2878 +#: common/models.py:2953 msgid "Context data for the barcode scan" msgstr "掃描條碼的上下文數據" -#: common/models.py:2885 +#: common/models.py:2960 msgid "Response" msgstr "響應" -#: common/models.py:2886 +#: common/models.py:2961 msgid "Response data from the barcode scan" msgstr "掃描條碼的響應數據" -#: common/models.py:2892 report/templates/report/inventree_test_report.html:103 -#: stock/models.py:3059 +#: common/models.py:2967 report/templates/report/inventree_test_report.html:103 +#: stock/models.py:3083 msgid "Result" msgstr "結果" -#: common/models.py:2893 +#: common/models.py:2968 msgid "Was the barcode scan successful?" msgstr "條碼掃描成功嗎?" -#: common/models.py:2975 +#: common/models.py:3050 msgid "An error occurred" msgstr "發生錯誤" -#: common/models.py:2996 +#: common/models.py:3071 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:3043 +#: common/models.py:3118 msgid "Email Message" msgstr "電子郵件訊息" -#: common/models.py:3044 +#: common/models.py:3119 msgid "Email Messages" msgstr "電子郵件訊息" -#: common/models.py:3051 +#: common/models.py:3126 msgid "Announced" msgstr "已公告" -#: common/models.py:3053 +#: common/models.py:3128 msgid "Sent" msgstr "已發送" -#: common/models.py:3054 +#: common/models.py:3129 msgid "Failed" msgstr "失敗" -#: common/models.py:3057 +#: common/models.py:3132 msgid "Delivered" msgstr "已送達" -#: common/models.py:3065 +#: common/models.py:3140 msgid "Confirmed" msgstr "已確認" -#: common/models.py:3071 +#: common/models.py:3146 msgid "Inbound" msgstr "入站" -#: common/models.py:3072 +#: common/models.py:3147 msgid "Outbound" msgstr "出站" -#: common/models.py:3077 +#: common/models.py:3152 msgid "No Reply" msgstr "不回覆" -#: common/models.py:3078 +#: common/models.py:3153 msgid "Track Delivery" msgstr "追蹤投遞" -#: common/models.py:3079 +#: common/models.py:3154 msgid "Track Read" msgstr "追蹤已讀" -#: common/models.py:3080 +#: common/models.py:3155 msgid "Track Click" msgstr "追蹤點擊" -#: common/models.py:3083 common/models.py:3186 +#: common/models.py:3158 common/models.py:3261 msgid "Global ID" msgstr "全域 ID" -#: common/models.py:3096 +#: common/models.py:3171 msgid "Identifier for this message (might be supplied by external system)" msgstr "此訊息的識別碼(可能由外部系統提供)" -#: common/models.py:3103 +#: common/models.py:3178 msgid "Thread ID" msgstr "討論串 ID" -#: common/models.py:3105 +#: common/models.py:3180 msgid "Identifier for this message thread (might be supplied by external system)" msgstr "此訊息討論串的識別碼(可能由外部系統提供)" -#: common/models.py:3114 +#: common/models.py:3189 msgid "Thread" msgstr "討論串" -#: common/models.py:3115 +#: common/models.py:3190 msgid "Linked thread for this message" msgstr "此訊息所連結的討論串" -#: common/models.py:3131 +#: common/models.py:3206 msgid "Priority" msgstr "優先序" -#: common/models.py:3173 +#: common/models.py:3248 msgid "Email Thread" msgstr "電子郵件討論串" -#: common/models.py:3174 +#: common/models.py:3249 msgid "Email Threads" msgstr "電子郵件討論串" -#: common/models.py:3180 generic/states/serializers.py:16 +#: common/models.py:3255 generic/states/serializers.py:16 #: machine/serializers.py:24 plugin/models.py:46 users/models.py:113 msgid "Key" msgstr "鍵" -#: common/models.py:3183 +#: common/models.py:3258 msgid "Unique key for this thread (used to identify the thread)" msgstr "此討論串的唯一鍵(用於辨識)" -#: common/models.py:3187 +#: common/models.py:3262 msgid "Unique identifier for this thread" msgstr "此討論串的唯一識別碼" -#: common/models.py:3194 +#: common/models.py:3269 msgid "Started Internal" msgstr "內部建立" -#: common/models.py:3195 +#: common/models.py:3270 msgid "Was this thread started internally?" msgstr "此討論串是否為內部建立?" -#: common/models.py:3200 +#: common/models.py:3275 msgid "Date and time that the thread was created" msgstr "討論串建立的日期時間" -#: common/models.py:3205 +#: common/models.py:3280 msgid "Date and time that the thread was last updated" msgstr "討論串最後更新的日期時間" @@ -2363,7 +2376,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:605 +#: common/notifications.py:73 common/notifications.py:80 order/api.py:607 msgid "Items Received" msgstr "收到的物品" @@ -2457,7 +2470,7 @@ msgstr "檔案名稱" #: common/serializers.py:771 common/serializers.py:838 #: common/serializers.py:914 importer/models.py:90 report/api.py:41 -#: report/models.py:296 report/serializers.py:71 +#: report/models.py:298 report/serializers.py:71 msgid "Model Type" msgstr "模型類型" @@ -2601,13 +2614,13 @@ msgstr "貨幣更新間隔時間" msgid "How often to update exchange rates (set to zero to disable)" msgstr "檢查更新的頻率(設置為零以禁用)" -#: common/setting/system.py:280 common/setting/system.py:320 -#: common/setting/system.py:333 common/setting/system.py:341 -#: common/setting/system.py:348 common/setting/system.py:357 -#: common/setting/system.py:366 common/setting/system.py:607 -#: common/setting/system.py:635 common/setting/system.py:742 -#: common/setting/system.py:1143 common/setting/system.py:1159 -#: common/setting/system.py:1176 +#: common/setting/system.py:280 common/setting/system.py:300 +#: common/setting/system.py:313 common/setting/system.py:321 +#: common/setting/system.py:328 common/setting/system.py:337 +#: common/setting/system.py:346 common/setting/system.py:587 +#: common/setting/system.py:615 common/setting/system.py:734 +#: common/setting/system.py:1151 common/setting/system.py:1167 +#: common/setting/system.py:1184 msgid "days" msgstr "天" @@ -2620,637 +2633,637 @@ msgid "Currency update plugin to use" msgstr "使用貨幣更新插件" #: common/setting/system.py:290 -msgid "Download from URL" -msgstr "從URL下載" - -#: common/setting/system.py:291 -msgid "Allow download of remote images and files from external URL" -msgstr "允許從外部 URL 下載遠程圖片和文件" - -#: common/setting/system.py:296 -msgid "Download Size Limit" -msgstr "下載大小限制" - -#: common/setting/system.py:297 -msgid "Maximum allowable download size for remote image" -msgstr "遠程圖片的最大允許下載大小" - -#: common/setting/system.py:303 -msgid "User-agent used to download from URL" -msgstr "用於從 URL 下載的 User-agent" - -#: common/setting/system.py:305 -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:310 msgid "Strict URL Validation" msgstr "嚴格的 URL 驗證" -#: common/setting/system.py:311 +#: common/setting/system.py:291 msgid "Require schema specification when validating URLs" msgstr "驗證 URL 時需要 schema 規範" -#: common/setting/system.py:316 +#: common/setting/system.py:296 msgid "Update Check Interval" msgstr "更新檢查間隔" -#: common/setting/system.py:317 +#: common/setting/system.py:297 msgid "How often to check for updates (set to zero to disable)" msgstr "檢查更新的頻率(設置為零以禁用)" -#: common/setting/system.py:323 +#: common/setting/system.py:303 msgid "Automatic Backup" msgstr "自動備份" -#: common/setting/system.py:324 +#: common/setting/system.py:304 msgid "Enable automatic backup of database and media files" msgstr "啟動資料庫和媒體文件自動備份" -#: common/setting/system.py:329 +#: common/setting/system.py:309 msgid "Auto Backup Interval" msgstr "自動備份間隔" -#: common/setting/system.py:330 +#: common/setting/system.py:310 msgid "Specify number of days between automated backup events" msgstr "指定自動備份之間的間隔天數" -#: common/setting/system.py:336 +#: common/setting/system.py:316 msgid "Task Deletion Interval" msgstr "任務刪除間隔" -#: common/setting/system.py:338 +#: common/setting/system.py:318 msgid "Background task results will be deleted after specified number of days" msgstr "後台任務結果將在指定天數後刪除" -#: common/setting/system.py:345 +#: common/setting/system.py:325 msgid "Error Log Deletion Interval" msgstr "錯誤日誌刪除間隔" -#: common/setting/system.py:346 +#: common/setting/system.py:326 msgid "Error logs will be deleted after specified number of days" msgstr "錯誤日誌將在指定天數後被刪除" -#: common/setting/system.py:352 +#: common/setting/system.py:332 msgid "Notification Deletion Interval" msgstr "通知刪除間隔" -#: common/setting/system.py:354 +#: common/setting/system.py:334 msgid "User notifications will be deleted after specified number of days" msgstr "用户通知將在指定天數後被刪除" -#: common/setting/system.py:361 +#: common/setting/system.py:341 msgid "Email Deletion Interval" msgstr "電子郵件刪除間隔" -#: common/setting/system.py:363 +#: common/setting/system.py:343 msgid "Email messages will be deleted after specified number of days" msgstr "電子郵件訊息將在指定天數後刪除" -#: common/setting/system.py:370 +#: common/setting/system.py:350 msgid "Protect Email Log" msgstr "保護電子郵件日誌" -#: common/setting/system.py:371 +#: common/setting/system.py:351 msgid "Prevent deletion of email log entries" msgstr "防止刪除電子郵件日誌紀錄" -#: common/setting/system.py:376 +#: common/setting/system.py:356 msgid "Barcode Support" msgstr "條形碼支持" -#: common/setting/system.py:377 +#: common/setting/system.py:357 msgid "Enable barcode scanner support in the web interface" msgstr "在網頁界面啓用條形碼掃描器支持" -#: common/setting/system.py:382 +#: common/setting/system.py:362 msgid "Store Barcode Results" msgstr "存儲條碼結果" -#: common/setting/system.py:383 +#: common/setting/system.py:363 msgid "Store barcode scan results in the database" msgstr "存儲條碼掃描結果" -#: common/setting/system.py:388 +#: common/setting/system.py:368 msgid "Barcode Scans Maximum Count" msgstr "條碼掃描最大計數" -#: common/setting/system.py:389 +#: common/setting/system.py:369 msgid "Maximum number of barcode scan results to store" msgstr "存儲條碼掃描結果的最大數量" -#: common/setting/system.py:394 +#: common/setting/system.py:374 msgid "Barcode Input Delay" msgstr "條形碼掃描延遲設置" -#: common/setting/system.py:395 +#: common/setting/system.py:375 msgid "Barcode input processing delay time" msgstr "條形碼輸入處理延遲時間" -#: common/setting/system.py:401 +#: common/setting/system.py:381 msgid "Barcode Webcam Support" msgstr "條碼攝像頭支持" -#: common/setting/system.py:402 +#: common/setting/system.py:382 msgid "Allow barcode scanning via webcam in browser" msgstr "允許通過網絡攝像頭掃描條形碼" -#: common/setting/system.py:407 +#: common/setting/system.py:387 msgid "Barcode Show Data" msgstr "條形碼顯示數據" -#: common/setting/system.py:408 +#: common/setting/system.py:388 msgid "Display barcode data in browser as text" msgstr "在瀏覽器中將條形碼數據顯示為文本" -#: common/setting/system.py:413 +#: common/setting/system.py:393 msgid "Barcode Generation Plugin" msgstr "條形碼生成插件" -#: common/setting/system.py:414 +#: common/setting/system.py:394 msgid "Plugin to use for internal barcode data generation" msgstr "用於內部條形碼數據生成的插件" -#: common/setting/system.py:419 +#: common/setting/system.py:399 msgid "Part Revisions" msgstr "零件修訂" -#: common/setting/system.py:420 +#: common/setting/system.py:400 msgid "Enable revision field for Part" msgstr "啓用零件修訂字段" -#: common/setting/system.py:425 +#: common/setting/system.py:405 msgid "Assembly Revision Only" msgstr "僅限裝配修訂版本" -#: common/setting/system.py:426 +#: common/setting/system.py:406 msgid "Only allow revisions for assembly parts" msgstr "僅允許對裝配零件進行修訂" -#: common/setting/system.py:431 +#: common/setting/system.py:411 msgid "Allow Deletion from Assembly" msgstr "允許從裝配中刪除" -#: common/setting/system.py:432 +#: common/setting/system.py:412 msgid "Allow deletion of parts which are used in an assembly" msgstr "允許刪除已在裝配中使用的零件" -#: common/setting/system.py:437 +#: common/setting/system.py:417 msgid "IPN Regex" msgstr "IPN 內部零件號" -#: common/setting/system.py:438 +#: common/setting/system.py:418 msgid "Regular expression pattern for matching Part IPN" msgstr "匹配零件 IPN(內部零件號)的正則表達式模式" -#: common/setting/system.py:441 +#: common/setting/system.py:421 msgid "Allow Duplicate IPN" msgstr "允許重複的 IPN(內部零件號)" -#: common/setting/system.py:442 +#: common/setting/system.py:422 msgid "Allow multiple parts to share the same IPN" msgstr "允許多個零件共享相同的 IPN(內部零件號)" -#: common/setting/system.py:447 +#: common/setting/system.py:427 msgid "Allow Editing IPN" msgstr "允許編輯 IPN(內部零件號)" -#: common/setting/system.py:448 +#: common/setting/system.py:428 msgid "Allow changing the IPN value while editing a part" msgstr "允許編輯零件時更改內部零件號" -#: common/setting/system.py:453 +#: common/setting/system.py:433 msgid "Copy Part BOM Data" msgstr "複製零件物料清單數據" -#: common/setting/system.py:454 +#: common/setting/system.py:434 msgid "Copy BOM data by default when duplicating a part" msgstr "複製零件時默認複製物料清單數據" -#: common/setting/system.py:459 +#: common/setting/system.py:439 msgid "Copy Part Parameter Data" msgstr "複製零件參數數據" -#: common/setting/system.py:460 +#: common/setting/system.py:440 msgid "Copy parameter data by default when duplicating a part" msgstr "複製零件時默認複製參數數據" -#: common/setting/system.py:465 +#: common/setting/system.py:445 msgid "Copy Part Test Data" msgstr "複製零件測試數據" -#: common/setting/system.py:466 +#: common/setting/system.py:446 msgid "Copy test data by default when duplicating a part" msgstr "複製零件時默認複製測試數據" -#: common/setting/system.py:471 +#: common/setting/system.py:451 msgid "Copy Category Parameter Templates" msgstr "複製類別參數模板" -#: common/setting/system.py:472 +#: common/setting/system.py:452 msgid "Copy category parameter templates when creating a part" msgstr "創建零件時複製類別參數模板" -#: common/setting/system.py:478 +#: common/setting/system.py:458 msgid "Parts are templates by default" msgstr "零件默認為模板" -#: common/setting/system.py:484 +#: common/setting/system.py:464 msgid "Parts can be assembled from other components by default" msgstr "默認情況下,元件可由其他零件組裝而成" -#: common/setting/system.py:489 part/models.py:1253 part/serializers.py:1763 -#: part/serializers.py:1771 +#: common/setting/system.py:469 part/models.py:1263 part/serializers.py:1740 +#: part/serializers.py:1748 msgid "Component" msgstr "組件" -#: common/setting/system.py:490 +#: common/setting/system.py:470 msgid "Parts can be used as sub-components by default" msgstr "默認情況下,零件可用作子部件" -#: common/setting/system.py:495 part/models.py:1271 +#: common/setting/system.py:475 part/models.py:1281 msgid "Purchaseable" msgstr "可購買" -#: common/setting/system.py:496 +#: common/setting/system.py:476 msgid "Parts are purchaseable by default" msgstr "默認情況下可購買零件" -#: common/setting/system.py:501 part/models.py:1277 stock/api.py:642 +#: common/setting/system.py:481 part/models.py:1287 stock/api.py:642 msgid "Salable" msgstr "可銷售" -#: common/setting/system.py:502 +#: common/setting/system.py:482 msgid "Parts are salable by default" msgstr "零件默認為可銷售" -#: common/setting/system.py:508 +#: common/setting/system.py:488 msgid "Parts are trackable by default" msgstr "默認情況下可跟蹤零件" -#: common/setting/system.py:513 part/models.py:1293 +#: common/setting/system.py:493 part/models.py:1303 msgid "Virtual" msgstr "虛擬的" -#: common/setting/system.py:514 +#: common/setting/system.py:494 msgid "Parts are virtual by default" msgstr "默認情況下,零件是虛擬的" -#: common/setting/system.py:519 +#: common/setting/system.py:499 msgid "Show related parts" msgstr "顯示相關零件" -#: common/setting/system.py:520 +#: common/setting/system.py:500 msgid "Display related parts for a part" msgstr "顯示零件的相關零件" -#: common/setting/system.py:525 +#: common/setting/system.py:505 msgid "Initial Stock Data" msgstr "初始庫存數據" -#: common/setting/system.py:526 +#: common/setting/system.py:506 msgid "Allow creation of initial stock when adding a new part" msgstr "允許在添加新零件時創建初始庫存" -#: common/setting/system.py:531 +#: common/setting/system.py:511 msgid "Initial Supplier Data" msgstr "初始供應商數據" -#: common/setting/system.py:533 +#: common/setting/system.py:513 msgid "Allow creation of initial supplier data when adding a new part" msgstr "允許在添加新零件時創建初始供應商數據" -#: common/setting/system.py:539 +#: common/setting/system.py:519 msgid "Part Name Display Format" msgstr "零件名稱顯示格式" -#: common/setting/system.py:540 +#: common/setting/system.py:520 msgid "Format to display the part name" msgstr "顯示零件名稱的格式" -#: common/setting/system.py:546 +#: common/setting/system.py:526 msgid "Part Category Default Icon" msgstr "零件類別默認圖標" -#: common/setting/system.py:547 +#: common/setting/system.py:527 msgid "Part category default icon (empty means no icon)" msgstr "零件類別默認圖標 (空表示沒有圖標)" -#: common/setting/system.py:552 +#: common/setting/system.py:532 msgid "Minimum Pricing Decimal Places" msgstr "最小定價小數位數" -#: common/setting/system.py:554 +#: common/setting/system.py:534 msgid "Minimum number of decimal places to display when rendering pricing data" msgstr "呈現定價數據時顯示的最小小數位數" -#: common/setting/system.py:565 +#: common/setting/system.py:545 msgid "Maximum Pricing Decimal Places" msgstr "最大定價小數位數" -#: common/setting/system.py:567 +#: common/setting/system.py:547 msgid "Maximum number of decimal places to display when rendering pricing data" msgstr "呈現定價數據時顯示的最大小數位數" -#: common/setting/system.py:578 +#: common/setting/system.py:558 msgid "Use Supplier Pricing" msgstr "使用供應商定價" -#: common/setting/system.py:580 +#: common/setting/system.py:560 msgid "Include supplier price breaks in overall pricing calculations" msgstr "將供應商的價批發價納入總體定價計算中" -#: common/setting/system.py:586 +#: common/setting/system.py:566 msgid "Purchase History Override" msgstr "購買歷史記錄覆蓋" -#: common/setting/system.py:588 +#: common/setting/system.py:568 msgid "Historical purchase order pricing overrides supplier price breaks" msgstr "歷史採購訂單定價優先於供應商批發價" -#: common/setting/system.py:594 +#: common/setting/system.py:574 msgid "Use Stock Item Pricing" msgstr "使用庫存項定價" -#: common/setting/system.py:596 +#: common/setting/system.py:576 msgid "Use pricing from manually entered stock data for pricing calculations" msgstr "使用手動輸入的庫存數據進行定價計算" -#: common/setting/system.py:602 +#: common/setting/system.py:582 msgid "Stock Item Pricing Age" msgstr "庫存項目定價時間" -#: common/setting/system.py:604 +#: common/setting/system.py:584 msgid "Exclude stock items older than this number of days from pricing calculations" msgstr "從定價計算中排除超過此天數的庫存項目" -#: common/setting/system.py:611 +#: common/setting/system.py:591 msgid "Use Variant Pricing" msgstr "使用變體定價" -#: common/setting/system.py:612 +#: common/setting/system.py:592 msgid "Include variant pricing in overall pricing calculations" msgstr "在整體定價計算中包括變體定價" -#: common/setting/system.py:617 +#: common/setting/system.py:597 msgid "Active Variants Only" msgstr "僅限活躍變體" -#: common/setting/system.py:619 +#: common/setting/system.py:599 msgid "Only use active variant parts for calculating variant pricing" msgstr "僅使用活躍變體零件計算變體價格" -#: common/setting/system.py:625 +#: common/setting/system.py:605 msgid "Auto Update Pricing" msgstr "自動更新定價" -#: common/setting/system.py:627 +#: common/setting/system.py:607 msgid "Automatically update part pricing when internal data changes" msgstr "當內部資料變更時自動更新零件定價" -#: common/setting/system.py:633 +#: common/setting/system.py:613 msgid "Pricing Rebuild Interval" msgstr "價格重建間隔" -#: common/setting/system.py:634 +#: common/setting/system.py:614 msgid "Number of days before part pricing is automatically updated" msgstr "零件價格自動更新前的天數" -#: common/setting/system.py:640 +#: common/setting/system.py:620 msgid "Internal Prices" msgstr "內部價格" -#: common/setting/system.py:641 +#: common/setting/system.py:621 msgid "Enable internal prices for parts" msgstr "啓用內部零件價格" -#: common/setting/system.py:646 +#: common/setting/system.py:626 msgid "Internal Price Override" msgstr "覆蓋內部價格" -#: common/setting/system.py:648 +#: common/setting/system.py:628 msgid "If available, internal prices override price range calculations" msgstr "如果有內部價格,內部價格將覆蓋價格範圍計算" -#: common/setting/system.py:654 +#: common/setting/system.py:634 msgid "Allow BOM Zero Quantity" msgstr "允許 BOM 零數量" -#: common/setting/system.py:656 +#: common/setting/system.py:636 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:662 +#: common/setting/system.py:642 msgid "Enable label printing" msgstr "啓用標籤打印功能" -#: common/setting/system.py:663 +#: common/setting/system.py:643 msgid "Enable label printing from the web interface" msgstr "啓用從網絡界面打印標籤" -#: common/setting/system.py:668 +#: common/setting/system.py:648 msgid "Label Image DPI" msgstr "標籤圖片 DPI" -#: common/setting/system.py:670 +#: common/setting/system.py:650 msgid "DPI resolution when generating image files to supply to label printing plugins" msgstr "生成圖像文件以供標籤打印插件使用時的 DPI 分辨率" -#: common/setting/system.py:676 +#: common/setting/system.py:656 msgid "Enable Reports" msgstr "啓用報告" -#: common/setting/system.py:677 +#: common/setting/system.py:657 msgid "Enable generation of reports" msgstr "啓用報告生成" -#: common/setting/system.py:682 +#: common/setting/system.py:662 msgid "Debug Mode" msgstr "調試模式" -#: common/setting/system.py:683 +#: common/setting/system.py:663 msgid "Generate reports in debug mode (HTML output)" msgstr "以調試模式生成報告(HTML 輸出)" -#: common/setting/system.py:688 +#: common/setting/system.py:668 msgid "Log Report Errors" msgstr "日誌錯誤報告" -#: common/setting/system.py:689 +#: common/setting/system.py:669 msgid "Log errors which occur when generating reports" msgstr "記錄生成報告時出現的錯誤" -#: common/setting/system.py:694 plugin/builtin/labels/label_sheet.py:29 -#: report/models.py:384 +#: common/setting/system.py:674 plugin/builtin/labels/label_sheet.py:29 +#: report/models.py:386 msgid "Page Size" msgstr "頁面大小" -#: common/setting/system.py:695 +#: common/setting/system.py:675 msgid "Default page size for PDF reports" msgstr "PDF 報告默認頁面大小" -#: common/setting/system.py:700 +#: common/setting/system.py:680 msgid "Enforce Parameter Units" msgstr "強制參數單位" -#: common/setting/system.py:702 +#: common/setting/system.py:682 msgid "If units are provided, parameter values must match the specified units" msgstr "如果提供了單位,參數值必須與指定的單位匹配" -#: common/setting/system.py:708 +#: common/setting/system.py:688 msgid "Globally Unique Serials" msgstr "全局唯一序列號" -#: common/setting/system.py:709 +#: common/setting/system.py:689 msgid "Serial numbers for stock items must be globally unique" msgstr "庫存項的序列號必須全局唯一" -#: common/setting/system.py:714 +#: common/setting/system.py:694 msgid "Delete Depleted Stock" msgstr "刪除已耗盡的庫存" -#: common/setting/system.py:715 +#: common/setting/system.py:695 msgid "Determines default behavior when a stock item is depleted" msgstr "設置庫存耗盡時的默認行為" -#: common/setting/system.py:720 +#: common/setting/system.py:700 +msgid "Allow Edit Serial Number" +msgstr "" + +#: common/setting/system.py:701 +msgid "Allow editing of serial number for stock items" +msgstr "" + +#: common/setting/system.py:706 +msgid "Delete Serialized Stock" +msgstr "" + +#: common/setting/system.py:707 +msgid "Allow deletion of stock items which have a serial number" +msgstr "" + +#: common/setting/system.py:712 msgid "Batch Code Template" msgstr "批號模板" -#: common/setting/system.py:721 +#: common/setting/system.py:713 msgid "Template for generating default batch codes for stock items" msgstr "為庫存項生成默認批號的模板" -#: common/setting/system.py:725 +#: common/setting/system.py:717 msgid "Stock Expiry" msgstr "庫存過期" -#: common/setting/system.py:726 +#: common/setting/system.py:718 msgid "Enable stock expiry functionality" msgstr "啓用庫存過期功能" -#: common/setting/system.py:731 +#: common/setting/system.py:723 msgid "Sell Expired Stock" msgstr "銷售過期庫存" -#: common/setting/system.py:732 +#: common/setting/system.py:724 msgid "Allow sale of expired stock" msgstr "允許銷售過期庫存" -#: common/setting/system.py:737 +#: common/setting/system.py:729 msgid "Stock Stale Time" msgstr "庫存過期時間" -#: common/setting/system.py:739 +#: common/setting/system.py:731 msgid "Number of days stock items are considered stale before expiring" msgstr "庫存項在到期前被視為過期的天數" -#: common/setting/system.py:746 +#: common/setting/system.py:738 msgid "Build Expired Stock" msgstr "生產過期庫存" -#: common/setting/system.py:747 +#: common/setting/system.py:739 msgid "Allow building with expired stock" msgstr "允許用過期的庫存生產" -#: common/setting/system.py:752 +#: common/setting/system.py:744 msgid "Stock Ownership Control" msgstr "庫存所有權控制" -#: common/setting/system.py:753 +#: common/setting/system.py:745 msgid "Enable ownership control over stock locations and items" msgstr "啓用庫存地點和項目的所有權控制" -#: common/setting/system.py:758 +#: common/setting/system.py:750 msgid "Stock Location Default Icon" msgstr "庫存地點默認圖標" -#: common/setting/system.py:759 +#: common/setting/system.py:751 msgid "Stock location default icon (empty means no icon)" msgstr "庫存地點默認圖標 (空表示沒有圖標)" -#: common/setting/system.py:764 +#: common/setting/system.py:756 msgid "Show Installed Stock Items" msgstr "顯示已安裝的庫存項" -#: common/setting/system.py:765 +#: common/setting/system.py:757 msgid "Display installed stock items in stock tables" msgstr "在庫存表中顯示已安裝的庫存項" -#: common/setting/system.py:770 +#: common/setting/system.py:762 msgid "Check BOM when installing items" msgstr "在安裝項目時檢查物料清單" -#: common/setting/system.py:772 +#: common/setting/system.py:764 msgid "Installed stock items must exist in the BOM for the parent part" msgstr "已安裝的庫存項目必須存在於上級零件的物料清單中" -#: common/setting/system.py:778 +#: common/setting/system.py:770 msgid "Allow Out of Stock Transfer" msgstr "允許超出庫存轉移" -#: common/setting/system.py:780 +#: common/setting/system.py:772 msgid "Allow stock items which are not in stock to be transferred between stock locations" msgstr "允許非庫存的庫存項目在庫存位置之間轉移" -#: common/setting/system.py:786 +#: common/setting/system.py:778 msgid "Build Order Reference Pattern" msgstr "生產訂單參考模式" -#: common/setting/system.py:787 +#: common/setting/system.py:779 msgid "Required pattern for generating Build Order reference field" msgstr "生成生產訂單參考字段所需的模式" -#: common/setting/system.py:792 common/setting/system.py:852 -#: common/setting/system.py:872 common/setting/system.py:916 +#: common/setting/system.py:784 common/setting/system.py:852 +#: common/setting/system.py:872 common/setting/system.py:924 msgid "Require Responsible Owner" msgstr "要求負責人" -#: common/setting/system.py:793 common/setting/system.py:853 -#: common/setting/system.py:873 common/setting/system.py:917 +#: common/setting/system.py:785 common/setting/system.py:853 +#: common/setting/system.py:873 common/setting/system.py:925 msgid "A responsible owner must be assigned to each order" msgstr "必須為每個訂單分配一個負責人" -#: common/setting/system.py:798 +#: common/setting/system.py:790 msgid "Require Active Part" msgstr "需要活動零件" -#: common/setting/system.py:799 +#: common/setting/system.py:791 msgid "Prevent build order creation for inactive parts" msgstr "防止為非活動零件創建生產訂單" -#: common/setting/system.py:804 +#: common/setting/system.py:796 msgid "Require Locked Part" msgstr "需要鎖定零件" -#: common/setting/system.py:805 +#: common/setting/system.py:797 msgid "Prevent build order creation for unlocked parts" msgstr "防止為未鎖定的零件創建生產訂單" -#: common/setting/system.py:810 +#: common/setting/system.py:802 msgid "Require Valid BOM" msgstr "需要有效的物料清單" -#: common/setting/system.py:811 +#: common/setting/system.py:803 msgid "Prevent build order creation unless BOM has been validated" msgstr "除非物料清單已驗證,否則禁止創建生產訂單" -#: common/setting/system.py:816 +#: common/setting/system.py:808 msgid "Require Closed Child Orders" msgstr "需要關閉子訂單" -#: common/setting/system.py:818 +#: common/setting/system.py:810 msgid "Prevent build order completion until all child orders are closed" msgstr "在所有子訂單關閉之前,阻止生產訂單的完成" -#: common/setting/system.py:824 +#: common/setting/system.py:816 msgid "External Build Orders" msgstr "外部生產工單" -#: common/setting/system.py:825 +#: common/setting/system.py:817 msgid "Enable external build order functionality" msgstr "啟用外部生產工單功能" +#: common/setting/system.py:822 +msgid "Require External Build Orders" +msgstr "" + +#: common/setting/system.py:824 +msgid "Require an external build order when ordering assembled parts from an external supplier" +msgstr "" + #: common/setting/system.py:830 msgid "Block Until Tests Pass" msgstr "阻止直到測試通過" @@ -3324,326 +3337,370 @@ msgid "Sales orders marked as shipped will automatically be completed, bypassing msgstr "標記為已發貨的銷售訂單將自動完成,繞過“已發貨”狀態" #: common/setting/system.py:908 +msgid "Block Incomplete Item Tests" +msgstr "" + +#: common/setting/system.py:910 +msgid "Prevent allocation of stock items to sales orders if required item tests are incomplete" +msgstr "" + +#: common/setting/system.py:916 msgid "Purchase Order Reference Pattern" msgstr "採購訂單參考模式" -#: common/setting/system.py:910 +#: common/setting/system.py:918 msgid "Required pattern for generating Purchase Order reference field" msgstr "生成採購訂單參考字段所需的模式" -#: common/setting/system.py:922 +#: common/setting/system.py:930 msgid "Edit Completed Purchase Orders" msgstr "編輯已完成的採購訂單" -#: common/setting/system.py:924 +#: common/setting/system.py:932 msgid "Allow editing of purchase orders after they have been shipped or completed" msgstr "允許在採購訂單已配送或完成後編輯訂單" -#: common/setting/system.py:930 +#: common/setting/system.py:938 msgid "Convert Currency" msgstr "轉換幣別" -#: common/setting/system.py:931 +#: common/setting/system.py:939 msgid "Convert item value to base currency when receiving stock" msgstr "收貨時將項目價值換算為基準幣別" -#: common/setting/system.py:936 +#: common/setting/system.py:944 msgid "Auto Complete Purchase Orders" msgstr "自動完成採購訂單" -#: common/setting/system.py:938 +#: common/setting/system.py:946 msgid "Automatically mark purchase orders as complete when all line items are received" msgstr "當收到所有行項目時,自動將採購訂單標記為完成" -#: common/setting/system.py:945 +#: common/setting/system.py:953 msgid "Enable password forgot" msgstr "忘記啓用密碼" -#: common/setting/system.py:946 +#: common/setting/system.py:954 msgid "Enable password forgot function on the login pages" msgstr "在登錄頁面上啓用忘記密碼功能" -#: common/setting/system.py:951 +#: common/setting/system.py:959 msgid "Enable registration" msgstr "啓用註冊" -#: common/setting/system.py:952 +#: common/setting/system.py:960 msgid "Enable self-registration for users on the login pages" msgstr "在登錄頁面為用户啓用自行註冊功能" -#: common/setting/system.py:957 +#: common/setting/system.py:965 msgid "Enable SSO" msgstr "啓用單點登錄" -#: common/setting/system.py:958 +#: common/setting/system.py:966 msgid "Enable SSO on the login pages" msgstr "在登錄界面啓用單點登錄" -#: common/setting/system.py:963 +#: common/setting/system.py:971 msgid "Enable SSO registration" msgstr "啓用單點登錄註冊" -#: common/setting/system.py:965 +#: common/setting/system.py:973 msgid "Enable self-registration via SSO for users on the login pages" msgstr "允許登錄頁面上的用户通過 SSO 進行自我註冊" -#: common/setting/system.py:971 +#: common/setting/system.py:979 msgid "Enable SSO group sync" msgstr "啓用單點登錄羣組同步" -#: common/setting/system.py:973 +#: common/setting/system.py:981 msgid "Enable synchronizing InvenTree groups with groups provided by the IdP" msgstr "啓用庫存管理系統組和由身份提供者提供的組的同步功能" -#: common/setting/system.py:979 +#: common/setting/system.py:987 msgid "SSO group key" msgstr "單點登錄系統組密鑰" -#: common/setting/system.py:980 +#: common/setting/system.py:988 msgid "The name of the groups claim attribute provided by the IdP" msgstr "由身份提供者提供的組聲明屬性名稱" -#: common/setting/system.py:985 +#: common/setting/system.py:993 msgid "SSO group map" msgstr "單點登錄系統組地圖" -#: common/setting/system.py:987 +#: common/setting/system.py:995 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:993 +#: common/setting/system.py:1001 msgid "Remove groups outside of SSO" msgstr "移除單點登錄系統以外的羣組" -#: common/setting/system.py:995 +#: common/setting/system.py:1003 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:1001 +#: common/setting/system.py:1009 msgid "Email required" msgstr "需要郵箱地址" -#: common/setting/system.py:1002 +#: common/setting/system.py:1010 msgid "Require user to supply mail on signup" msgstr "要求用户在註冊時提供郵件" -#: common/setting/system.py:1007 +#: common/setting/system.py:1015 msgid "Auto-fill SSO users" msgstr "自動填充單點登錄系統用户" -#: common/setting/system.py:1008 +#: common/setting/system.py:1016 msgid "Automatically fill out user-details from SSO account-data" msgstr "自動使用單點登錄系統賬户的數據填寫用户詳細信息" -#: common/setting/system.py:1013 +#: common/setting/system.py:1021 msgid "Mail twice" msgstr "發兩次郵件" -#: common/setting/system.py:1014 +#: common/setting/system.py:1022 msgid "On signup ask users twice for their mail" msgstr "註冊時詢問用户他們的電子郵件兩次" -#: common/setting/system.py:1019 +#: common/setting/system.py:1027 msgid "Password twice" msgstr "兩次輸入密碼" -#: common/setting/system.py:1020 +#: common/setting/system.py:1028 msgid "On signup ask users twice for their password" msgstr "當註冊時請用户輸入密碼兩次" -#: common/setting/system.py:1025 +#: common/setting/system.py:1033 msgid "Allowed domains" msgstr "域名白名單" -#: common/setting/system.py:1027 +#: common/setting/system.py:1035 msgid "Restrict signup to certain domains (comma-separated, starting with @)" msgstr "限制註冊到某些域名 (逗號分隔,以 @ 開頭)" -#: common/setting/system.py:1033 +#: common/setting/system.py:1041 msgid "Group on signup" msgstr "註冊羣組" -#: common/setting/system.py:1035 +#: common/setting/system.py:1043 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:1041 +#: common/setting/system.py:1049 msgid "Enforce MFA" msgstr "強制啓用多因素安全認證" -#: common/setting/system.py:1042 +#: common/setting/system.py:1050 msgid "Users must use multifactor security." msgstr "用户必須使用多因素安全認證。" -#: common/setting/system.py:1047 +#: common/setting/system.py:1055 msgid "Enabling this setting will require all users to set up multifactor authentication. All sessions will be disconnected immediately." msgstr "啟用此設定將要求所有使用者設定多因素驗證。所有工作階段將立即中斷連線。" -#: common/setting/system.py:1052 +#: common/setting/system.py:1060 msgid "Check plugins on startup" msgstr "啓動時檢查插件" -#: common/setting/system.py:1054 +#: common/setting/system.py:1062 msgid "Check that all plugins are installed on startup - enable in container environments" msgstr "啓動時檢查全部插件是否已安裝 - 在容器環境中啓用" -#: common/setting/system.py:1061 +#: common/setting/system.py:1069 msgid "Check for plugin updates" msgstr "檢查插件更新" -#: common/setting/system.py:1062 +#: common/setting/system.py:1070 msgid "Enable periodic checks for updates to installed plugins" msgstr "啓用定期檢查已安裝插件的更新" -#: common/setting/system.py:1068 +#: common/setting/system.py:1076 msgid "Enable URL integration" msgstr "啓用統一資源定位符集成" -#: common/setting/system.py:1069 +#: common/setting/system.py:1077 msgid "Enable plugins to add URL routes" msgstr "啓用插件以添加統一資源定位符路由" -#: common/setting/system.py:1075 +#: common/setting/system.py:1083 msgid "Enable navigation integration" msgstr "啓用導航集成" -#: common/setting/system.py:1076 +#: common/setting/system.py:1084 msgid "Enable plugins to integrate into navigation" msgstr "啓用插件以集成到導航中" -#: common/setting/system.py:1082 +#: common/setting/system.py:1090 msgid "Enable app integration" msgstr "啓用應用集成" -#: common/setting/system.py:1083 +#: common/setting/system.py:1091 msgid "Enable plugins to add apps" msgstr "啓用插件添加應用" -#: common/setting/system.py:1089 +#: common/setting/system.py:1097 msgid "Enable schedule integration" msgstr "啓用調度集成" -#: common/setting/system.py:1090 +#: common/setting/system.py:1098 msgid "Enable plugins to run scheduled tasks" msgstr "啓用插件來運行預定任務" -#: common/setting/system.py:1096 +#: common/setting/system.py:1104 msgid "Enable event integration" msgstr "啓用事件集成" -#: common/setting/system.py:1097 +#: common/setting/system.py:1105 msgid "Enable plugins to respond to internal events" msgstr "啓用插件響應內部事件" -#: common/setting/system.py:1103 +#: common/setting/system.py:1111 msgid "Enable interface integration" msgstr "啓用界面集成" -#: common/setting/system.py:1104 +#: common/setting/system.py:1112 msgid "Enable plugins to integrate into the user interface" msgstr "啓用插件集成到用户界面" -#: common/setting/system.py:1110 +#: common/setting/system.py:1118 msgid "Enable mail integration" msgstr "啟用郵件整合" -#: common/setting/system.py:1111 +#: common/setting/system.py:1119 msgid "Enable plugins to process outgoing/incoming mails" msgstr "允許模組處理寄出/接收郵件" -#: common/setting/system.py:1117 +#: common/setting/system.py:1125 msgid "Enable project codes" msgstr "啟用專案代碼" -#: common/setting/system.py:1118 +#: common/setting/system.py:1126 msgid "Enable project codes for tracking projects" msgstr "啟用專案代碼以追蹤專案" -#: common/setting/system.py:1123 +#: common/setting/system.py:1131 msgid "Enable Stocktake" msgstr "啟用盤點" -#: common/setting/system.py:1125 +#: common/setting/system.py:1133 msgid "Enable functionality for recording historical stock levels and value" msgstr "啟用記錄庫存數量及價值歷史的功能" -#: common/setting/system.py:1131 +#: common/setting/system.py:1139 msgid "Exclude External Locations" msgstr "排除外部地點" -#: common/setting/system.py:1133 +#: common/setting/system.py:1141 msgid "Exclude stock items in external locations from stocktake calculations" msgstr "從盤點計算中排除外部位置的庫存項目" -#: common/setting/system.py:1139 +#: common/setting/system.py:1147 msgid "Automatic Stocktake Period" msgstr "自動盤點週期" -#: common/setting/system.py:1140 +#: common/setting/system.py:1148 msgid "Number of days between automatic stocktake recording" msgstr "自動記錄盤點的天數間隔" -#: common/setting/system.py:1146 +#: common/setting/system.py:1154 msgid "Delete Old Stocktake Entries" msgstr "刪除舊的盤點項目" -#: common/setting/system.py:1148 +#: common/setting/system.py:1156 msgid "Delete stocktake entries older than the specified number of days" msgstr "刪除超過指定天數的盤點項目" -#: common/setting/system.py:1154 +#: common/setting/system.py:1162 msgid "Stocktake Deletion Interval" msgstr "盤點刪除間隔" -#: common/setting/system.py:1156 +#: common/setting/system.py:1164 msgid "Stocktake entries will be deleted after specified number of days" msgstr "盤點項目將在指定天數後刪除" -#: common/setting/system.py:1163 +#: common/setting/system.py:1171 msgid "Delete Old Stock Tracking Entries" msgstr "刪除舊庫存的追蹤紀錄" -#: common/setting/system.py:1165 +#: common/setting/system.py:1173 msgid "Delete stock tracking entries older than the specified number of days" msgstr "刪除超過指定天數的庫存追蹤項目" -#: common/setting/system.py:1171 +#: common/setting/system.py:1179 msgid "Stock Tracking Deletion Interval" msgstr "庫存追蹤刪除間隔" -#: common/setting/system.py:1173 +#: common/setting/system.py:1181 msgid "Stock tracking entries will be deleted after specified number of days" msgstr "庫存追蹤項目將在指定天數後刪除" -#: common/setting/system.py:1180 +#: common/setting/system.py:1188 msgid "Display Users full names" msgstr "顯示用户全名" -#: common/setting/system.py:1181 +#: common/setting/system.py:1189 msgid "Display Users full names instead of usernames" msgstr "顯示用户全名而不是用户名" -#: common/setting/system.py:1186 +#: common/setting/system.py:1194 msgid "Display User Profiles" msgstr "顯示使用者個人檔案" -#: common/setting/system.py:1187 +#: common/setting/system.py:1195 msgid "Display Users Profiles on their profile page" msgstr "在個人頁面顯示使用者檔案資訊" -#: common/setting/system.py:1192 +#: common/setting/system.py:1200 +msgid "Week Starts On" +msgstr "" + +#: common/setting/system.py:1201 +msgid "Starting day of the week, for display in calendar views" +msgstr "" + +#: common/setting/system.py:1204 +msgid "Sunday" +msgstr "" + +#: common/setting/system.py:1205 +msgid "Monday" +msgstr "" + +#: common/setting/system.py:1206 +msgid "Tuesday" +msgstr "" + +#: common/setting/system.py:1207 +msgid "Wednesday" +msgstr "" + +#: common/setting/system.py:1208 +msgid "Thursday" +msgstr "" + +#: common/setting/system.py:1209 +msgid "Friday" +msgstr "" + +#: common/setting/system.py:1210 +msgid "Saturday" +msgstr "" + +#: common/setting/system.py:1214 msgid "Enable Test Station Data" msgstr "啓用測試站數據" -#: common/setting/system.py:1193 +#: common/setting/system.py:1215 msgid "Enable test station data collection for test results" msgstr "啓用測試站數據收集以獲取測試結果" -#: common/setting/system.py:1198 +#: common/setting/system.py:1220 msgid "Enable Machine Ping" msgstr "啟用設備 Ping" -#: common/setting/system.py:1200 +#: common/setting/system.py:1222 msgid "Enable periodic ping task of registered machines to check their status" msgstr "啟用對已註冊機器的定期 ping 任務以檢查其狀態" @@ -3951,6 +4008,14 @@ msgstr "上次使用的打印設備" msgid "Save the last used printing machines for a user" msgstr "為用户保存上次使用的打印設備" +#: common/setting/user.py:272 +msgid "Display Items at Final Level" +msgstr "" + +#: common/setting/user.py:274 +msgid "Automatically default to showing items/parts instead of sub-levels for locations or categories with no children" +msgstr "" + #: common/validators.py:38 msgid "All models" msgstr "所有模型" @@ -4012,8 +4077,8 @@ msgstr "內部零件已激活" msgid "Supplier is Active" msgstr "供應商已激活" -#: company/api.py:275 company/models.py:535 company/serializers.py:473 -#: part/serializers.py:491 +#: company/api.py:275 company/models.py:535 company/serializers.py:446 +#: part/serializers.py:489 msgid "Manufacturer" msgstr "製造商" @@ -4059,7 +4124,7 @@ msgid "Contact email address" msgstr "聯繫人電子郵箱地址" #: company/models.py:181 company/models.py:311 order/models.py:525 -#: users/models.py:561 +#: users/models.py:559 msgid "Contact" msgstr "聯繫人" @@ -4111,7 +4176,7 @@ msgstr "稅籍編號" msgid "Company Tax ID" msgstr "公司稅籍編號" -#: company/models.py:350 order/models.py:535 order/models.py:2340 +#: company/models.py:350 order/models.py:535 order/models.py:2371 msgid "Address" msgstr "地址" @@ -4203,12 +4268,12 @@ msgstr "內部使用的裝運通知單" msgid "Link to address information (external)" msgstr "鏈接地址信息 (外部)" -#: company/models.py:507 company/models.py:802 company/serializers.py:501 +#: company/models.py:507 company/models.py:802 company/serializers.py:474 #: stock/api.py:560 msgid "Manufacturer Part" msgstr "製造商零件" -#: company/models.py:524 company/models.py:764 stock/models.py:1032 +#: company/models.py:524 company/models.py:764 stock/models.py:1056 #: stock/serializers.py:418 msgid "Base Part" msgstr "基礎零件" @@ -4221,8 +4286,8 @@ msgstr "選擇零件" msgid "Select manufacturer" msgstr "選擇製造商" -#: company/models.py:542 company/serializers.py:512 order/serializers.py:742 -#: part/serializers.py:501 +#: company/models.py:542 company/serializers.py:485 order/serializers.py:743 +#: part/serializers.py:499 msgid "MPN" msgstr "製造商零件編號" @@ -4250,8 +4315,8 @@ msgstr "包裝單位必須大於零" msgid "Linked manufacturer part must reference the same base part" msgstr "鏈接的製造商零件必須引用相同的基礎零件" -#: company/models.py:774 company/serializers.py:460 company/serializers.py:495 -#: order/models.py:666 part/serializers.py:475 +#: company/models.py:774 company/serializers.py:433 company/serializers.py:468 +#: order/models.py:666 part/serializers.py:473 #: 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:566 templates/email/overdue_purchase_order.html:16 @@ -4262,7 +4327,7 @@ msgstr "供應商" msgid "Select supplier" msgstr "選擇供應商" -#: company/models.py:781 part/serializers.py:486 +#: company/models.py:781 part/serializers.py:484 msgid "Supplier stock keeping unit" msgstr "供應商庫存管理單位" @@ -4290,15 +4355,15 @@ msgstr "外部供應商零件鏈接的URL" msgid "Supplier part description" msgstr "供應商零件説明" -#: company/models.py:835 part/models.py:2300 +#: company/models.py:835 part/models.py:2310 msgid "base cost" msgstr "基本費用" -#: company/models.py:836 part/models.py:2301 +#: company/models.py:836 part/models.py:2311 msgid "Minimum charge (e.g. stocking fee)" msgstr "最低費用(例如庫存費)" -#: company/models.py:843 order/serializers.py:887 stock/models.py:1063 +#: company/models.py:843 order/serializers.py:888 stock/models.py:1087 #: stock/serializers.py:1681 msgid "Packaging" msgstr "打包" @@ -4315,7 +4380,7 @@ msgstr "包裝數量" msgid "Total quantity supplied in a single pack. Leave empty for single items." msgstr "單包供應的總數量。為單個項目留空。" -#: company/models.py:870 part/models.py:2307 +#: company/models.py:870 part/models.py:2317 msgid "multiple" msgstr "多個" @@ -4339,23 +4404,23 @@ msgstr "上次更新可用性數據的日期" msgid "Supplier Price Break" msgstr "供應商批發價" -#: company/serializers.py:191 +#: company/serializers.py:185 msgid "Default currency used for this supplier" msgstr "此供應商使用的默認貨幣" -#: company/serializers.py:229 +#: company/serializers.py:202 msgid "Company Name" msgstr "公司名稱" -#: company/serializers.py:417 part/serializers.py:857 stock/serializers.py:444 +#: company/serializers.py:390 part/serializers.py:854 stock/serializers.py:444 msgid "In Stock" msgstr "有庫存" -#: company/serializers.py:435 +#: company/serializers.py:408 msgid "Price Breaks" msgstr "價格折扣" -#: company/serializers.py:488 +#: company/serializers.py:461 msgid "Pretty Name" msgstr "顯示名稱" @@ -4511,7 +4576,7 @@ msgstr "原始行數據" msgid "Errors" msgstr "錯誤" -#: importer/models.py:585 part/serializers.py:1159 +#: importer/models.py:585 part/serializers.py:1148 msgid "Valid" msgstr "有效" @@ -4623,7 +4688,7 @@ msgstr "每個標籤要打印的份數" msgid "Connected" msgstr "已連接" -#: machine/machine_types/label_printer.py:232 order/api.py:1846 +#: machine/machine_types/label_printer.py:232 order/api.py:1848 msgid "Unknown" msgstr "未知" @@ -4727,7 +4792,7 @@ msgstr "屬性鍵值" msgid "Value of the property" msgstr "屬性值" -#: machine/serializers.py:30 users/models.py:238 +#: machine/serializers.py:30 users/models.py:236 msgid "Group" msgstr "組" @@ -4751,117 +4816,117 @@ msgstr "最大進度" msgid "Maximum value for progress type, required if type=progress" msgstr "進度類型的最大值,當 type=progress 時為必填" -#: order/api.py:128 +#: order/api.py:130 msgid "Order Reference" msgstr "訂單參考" -#: order/api.py:156 order/api.py:1218 +#: order/api.py:158 order/api.py:1220 msgid "Outstanding" msgstr "未完成" -#: order/api.py:172 +#: order/api.py:174 msgid "Has Project Code" msgstr "有項目編碼" -#: order/api.py:186 order/models.py:493 +#: order/api.py:188 order/models.py:493 msgid "Created By" msgstr "創建人" -#: order/api.py:190 +#: order/api.py:192 msgid "Created Before" msgstr "建立時間早於" -#: order/api.py:194 +#: order/api.py:196 msgid "Created After" msgstr "建立時間晚於" -#: order/api.py:198 +#: order/api.py:200 msgid "Has Start Date" msgstr "具有開始日期" -#: order/api.py:206 +#: order/api.py:208 msgid "Start Date Before" msgstr "開始日期早於" -#: order/api.py:210 +#: order/api.py:212 msgid "Start Date After" msgstr "開始日期晚於" -#: order/api.py:214 +#: order/api.py:216 msgid "Has Target Date" msgstr "具有目標日期" -#: order/api.py:222 +#: order/api.py:224 msgid "Target Date Before" msgstr "目標日期早於" -#: order/api.py:226 +#: order/api.py:228 msgid "Target Date After" msgstr "目標日期晚於" -#: order/api.py:230 +#: order/api.py:232 msgid "Updated Before" msgstr "更新之前" -#: order/api.py:234 +#: order/api.py:236 msgid "Updated After" msgstr "更新之後" -#: order/api.py:285 +#: order/api.py:287 msgid "Has Pricing" msgstr "有定價" -#: order/api.py:338 order/api.py:825 order/api.py:1527 +#: order/api.py:340 order/api.py:827 order/api.py:1529 msgid "Completed Before" msgstr "完成時間早於" -#: order/api.py:342 order/api.py:829 order/api.py:1531 +#: order/api.py:344 order/api.py:831 order/api.py:1533 msgid "Completed After" msgstr "完成時間晚於" -#: order/api.py:348 order/api.py:352 +#: order/api.py:350 order/api.py:354 msgid "External Build Order" msgstr "外部生產工單" -#: order/api.py:537 order/api.py:925 order/api.py:1181 order/models.py:1972 -#: order/models.py:2098 order/models.py:2150 order/models.py:2331 -#: order/models.py:2527 order/models.py:3056 order/models.py:3122 +#: order/api.py:539 order/api.py:927 order/api.py:1183 order/models.py:2003 +#: order/models.py:2129 order/models.py:2181 order/models.py:2362 +#: order/models.py:2558 order/models.py:3087 order/models.py:3153 msgid "Order" msgstr "訂單" -#: order/api.py:541 order/api.py:993 +#: order/api.py:543 order/api.py:995 msgid "Order Complete" msgstr "訂單完成" -#: order/api.py:573 order/api.py:577 order/serializers.py:753 +#: order/api.py:575 order/api.py:579 order/serializers.py:754 msgid "Internal Part" msgstr "內部零件" -#: order/api.py:595 +#: order/api.py:597 msgid "Order Pending" msgstr "訂單待定" -#: order/api.py:978 +#: order/api.py:980 msgid "Completed" msgstr "已完成" -#: order/api.py:1234 +#: order/api.py:1236 msgid "Has Shipment" msgstr "已出貨" -#: order/api.py:1442 +#: order/api.py:1444 msgid "Shipment not found" msgstr "找不到發貨紀錄" -#: order/api.py:1840 order/models.py:577 order/models.py:1973 -#: order/models.py:2099 +#: order/api.py:1842 order/models.py:577 order/models.py:2004 +#: order/models.py:2130 #: 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:1842 order/models.py:1288 order/models.py:2151 -#: order/models.py:2332 order/models.py:2528 +#: order/api.py:1844 order/models.py:1292 order/models.py:2182 +#: order/models.py:2363 order/models.py:2559 #: 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 @@ -4869,8 +4934,8 @@ msgstr "採購訂單" msgid "Sales Order" msgstr "銷售訂單" -#: order/api.py:1844 order/models.py:2699 order/models.py:3057 -#: order/models.py:3123 +#: order/api.py:1846 order/models.py:2730 order/models.py:3088 +#: order/models.py:3154 #: report/templates/report/inventree_return_order_report.html:13 #: templates/email/overdue_return_order.html:15 msgid "Return Order" @@ -4886,11 +4951,11 @@ msgstr "總價格" msgid "Total price for this order" msgstr "此訂單的總價" -#: order/models.py:96 order/serializers.py:61 +#: order/models.py:96 order/serializers.py:62 msgid "Order Currency" msgstr "訂單貨幣" -#: order/models.py:99 order/serializers.py:62 +#: order/models.py:99 order/serializers.py:63 msgid "Currency for this order (leave blank to use company default)" msgstr "此訂單的貨幣 (留空以使用公司默認值)" @@ -4914,11 +4979,11 @@ msgstr "地址不符合選定的公司" msgid "Order description (optional)" msgstr "訂單描述 (可選)" -#: order/models.py:457 order/models.py:1854 +#: order/models.py:457 order/models.py:1871 msgid "Select project code for this order" msgstr "為此訂單選擇項目編碼" -#: order/models.py:463 order/models.py:1835 order/models.py:2396 +#: order/models.py:463 order/models.py:1852 order/models.py:2427 msgid "Link to external page" msgstr "鏈接到外部頁面" @@ -4930,7 +4995,7 @@ msgstr "開始日期" msgid "Scheduled start date for this order" msgstr "此訂單的預定開始日期" -#: order/models.py:477 order/models.py:1842 order/serializers.py:307 +#: order/models.py:477 order/models.py:1859 order/serializers.py:308 #: report/templates/report/inventree_build_order_report.html:125 msgid "Target Date" msgstr "預計日期" @@ -4963,12 +5028,12 @@ msgstr "此訂單的聯繫人" msgid "Company address for this order" msgstr "此訂單的公司地址" -#: order/models.py:642 order/models.py:1351 +#: order/models.py:642 order/models.py:1355 msgid "Order reference" msgstr "訂單參考" -#: order/models.py:651 order/models.py:1375 order/models.py:2789 -#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:542 +#: order/models.py:651 order/models.py:1379 order/models.py:2820 +#: stock/serializers.py:565 stock/serializers.py:1017 users/models.py:540 msgid "Status" msgstr "狀態" @@ -4992,15 +5057,15 @@ msgstr "供應商訂單參考代碼" msgid "received by" msgstr "接收人" -#: order/models.py:695 order/models.py:2804 +#: order/models.py:695 order/models.py:2835 msgid "Date order was completed" msgstr "訂單完成日期" -#: order/models.py:704 order/models.py:2031 +#: order/models.py:704 order/models.py:2062 msgid "Destination" msgstr "目的地" -#: order/models.py:705 order/models.py:2035 +#: order/models.py:705 order/models.py:2066 msgid "Destination for received items" msgstr "收到項目的存放目的地" @@ -5024,616 +5089,624 @@ msgstr "數量必須是正數" msgid "Serial numbers cannot be assigned to virtual parts" msgstr "序號無法分配給虛擬零件" -#: order/models.py:1362 order/models.py:2776 stock/models.py:1085 -#: stock/models.py:1086 stock/serializers.py:1397 +#: order/models.py:1366 order/models.py:2807 stock/models.py:1109 +#: stock/models.py:1110 stock/serializers.py:1397 #: templates/email/overdue_return_order.html:16 #: templates/email/overdue_sales_order.html:16 msgid "Customer" msgstr "客户" -#: order/models.py:1363 +#: order/models.py:1367 msgid "Company to which the items are being sold" msgstr "出售物品的公司" -#: order/models.py:1376 +#: order/models.py:1380 msgid "Sales order status" msgstr "銷售訂單狀態" -#: order/models.py:1387 order/models.py:2796 +#: order/models.py:1391 order/models.py:2827 msgid "Customer Reference " msgstr "客户參考 " -#: order/models.py:1388 order/models.py:2797 +#: order/models.py:1392 order/models.py:2828 msgid "Customer order reference code" msgstr "客户訂單參考代碼" -#: order/models.py:1392 order/models.py:2348 +#: order/models.py:1396 order/models.py:2379 msgid "Shipment Date" msgstr "發貨日期" -#: order/models.py:1401 +#: order/models.py:1405 msgid "shipped by" msgstr "發貨人" -#: order/models.py:1452 +#: order/models.py:1456 msgid "Order is already complete" msgstr "訂單已完成" -#: order/models.py:1455 +#: order/models.py:1459 msgid "Order is already cancelled" msgstr "訂單已取消" -#: order/models.py:1459 +#: order/models.py:1463 msgid "Only an open order can be marked as complete" msgstr "只有未結訂單才能標記為已完成" -#: order/models.py:1463 +#: order/models.py:1467 msgid "Order cannot be completed as there are incomplete shipments" msgstr "由於發貨不完整,訂單無法完成" -#: order/models.py:1468 +#: order/models.py:1472 msgid "Order cannot be completed as there are incomplete allocations" msgstr "訂單無法完成,因為仍有未完成的分配" -#: order/models.py:1477 +#: order/models.py:1481 msgid "Order cannot be completed as there are incomplete line items" msgstr "訂單無法完成,因為行項目不完整" -#: order/models.py:1772 order/models.py:1788 +#: order/models.py:1778 order/models.py:1803 msgid "The order is locked and cannot be modified" msgstr "此訂單已鎖定,無法修改" -#: order/models.py:1796 +#: order/models.py:1811 msgid "Item quantity" msgstr "項目數量" -#: order/models.py:1814 +#: order/models.py:1829 msgid "Line Number" msgstr "行號" -#: order/models.py:1815 +#: order/models.py:1830 msgid "Line number for this item (optional)" msgstr "此項目的行號 (選填)" -#: order/models.py:1822 +#: order/models.py:1839 msgid "Line item reference" msgstr "行項目參考" -#: order/models.py:1829 +#: order/models.py:1846 msgid "Line item notes" msgstr "行項目註釋" -#: order/models.py:1844 +#: order/models.py:1861 msgid "Target date for this line item (leave blank to use the target date from the order)" msgstr "此行項目的目標日期 (留空以使用訂單中的目標日期)" -#: order/models.py:1874 +#: order/models.py:1891 msgid "Line item description (optional)" msgstr "行項目描述 (可選)" -#: order/models.py:1881 +#: order/models.py:1898 msgid "Additional context for this line" msgstr "此行的附加上下文" -#: order/models.py:1891 +#: order/models.py:1908 msgid "Unit price" msgstr "單位價格" -#: order/models.py:1910 +#: order/models.py:1927 msgid "Purchase Order Line Item" msgstr "採購訂單行項目" -#: order/models.py:1939 +#: order/models.py:1956 msgid "Supplier part must match supplier" msgstr "供應商零件必須與供應商匹配" -#: order/models.py:1944 +#: order/models.py:1964 msgid "Build order must be marked as external" msgstr "生產工單必須標記為外部" -#: order/models.py:1951 +#: order/models.py:1971 msgid "Build orders can only be linked to assembly parts" msgstr "生產工單只能連結到組裝零件" -#: order/models.py:1957 +#: order/models.py:1977 msgid "Build order part must match line item part" msgstr "生產工單的零件必須與行項目的零件一致" -#: order/models.py:1992 +#: order/models.py:1987 +msgid "An external build order is required for assembly parts" +msgstr "" + +#: order/models.py:2023 msgid "Supplier part" msgstr "供應商零件" -#: order/models.py:1999 +#: order/models.py:2030 msgid "Received" msgstr "已接收" -#: order/models.py:2000 +#: order/models.py:2031 msgid "Number of items received" msgstr "收到的物品數量" -#: order/models.py:2008 stock/models.py:1208 stock/serializers.py:666 +#: order/models.py:2039 stock/models.py:1232 stock/serializers.py:666 msgid "Purchase Price" msgstr "採購價格" -#: order/models.py:2009 +#: order/models.py:2040 msgid "Unit purchase price" msgstr "每單位的採購價格" -#: order/models.py:2025 +#: order/models.py:2056 msgid "External Build Order to be fulfilled by this line item" msgstr "由此行項目履行的外部生產工單" -#: order/models.py:2087 +#: order/models.py:2118 msgid "Purchase Order Extra Line" msgstr "採購訂單附加行" -#: order/models.py:2116 +#: order/models.py:2147 msgid "Sales Order Line Item" msgstr "銷售訂單行項目" -#: order/models.py:2143 +#: order/models.py:2174 msgid "Only salable parts can be assigned to a sales order" msgstr "只有可銷售的零件才能分配給銷售訂單" -#: order/models.py:2169 +#: order/models.py:2200 msgid "Sale Price" msgstr "售出價格" -#: order/models.py:2170 +#: order/models.py:2201 msgid "Unit sale price" msgstr "單位售出價格" -#: order/models.py:2179 order/status_codes.py:50 +#: order/models.py:2210 order/status_codes.py:50 msgid "Shipped" msgstr "已配送" -#: order/models.py:2180 +#: order/models.py:2211 msgid "Shipped quantity" msgstr "發貨數量" -#: order/models.py:2292 +#: order/models.py:2323 msgid "Sales Order Shipment" msgstr "銷售訂單發貨" -#: order/models.py:2305 +#: order/models.py:2336 msgid "Shipment address must match the customer" msgstr "配送地址必須跟客戶相符" -#: order/models.py:2341 +#: order/models.py:2372 msgid "Shipping address for this shipment" msgstr "配送的採購地址" -#: order/models.py:2349 +#: order/models.py:2380 msgid "Date of shipment" msgstr "發貨日期" -#: order/models.py:2355 +#: order/models.py:2386 msgid "Delivery Date" msgstr "送達日期" -#: order/models.py:2356 +#: order/models.py:2387 msgid "Date of delivery of shipment" msgstr "裝運交貨日期" -#: order/models.py:2364 +#: order/models.py:2395 msgid "Checked By" msgstr "審核人" -#: order/models.py:2365 +#: order/models.py:2396 msgid "User who checked this shipment" msgstr "檢查此裝運的用户" -#: order/models.py:2372 order/models.py:2624 order/serializers.py:1798 -#: order/serializers.py:1922 +#: order/models.py:2403 order/models.py:2655 order/serializers.py:1808 +#: order/serializers.py:1942 #: report/templates/report/inventree_sales_order_shipment_report.html:14 msgid "Shipment" msgstr "配送" -#: order/models.py:2373 +#: order/models.py:2404 msgid "Shipment number" msgstr "配送單號" -#: order/models.py:2381 +#: order/models.py:2412 msgid "Tracking Number" msgstr "跟蹤單號" -#: order/models.py:2382 +#: order/models.py:2413 msgid "Shipment tracking information" msgstr "配送跟蹤信息" -#: order/models.py:2389 +#: order/models.py:2420 msgid "Invoice Number" msgstr "發票編號" -#: order/models.py:2390 +#: order/models.py:2421 msgid "Reference number for associated invoice" msgstr "相關發票的參考號" -#: order/models.py:2436 +#: order/models.py:2467 msgid "Shipment has already been sent" msgstr "貨物已發出" -#: order/models.py:2439 +#: order/models.py:2470 msgid "Shipment has no allocated stock items" msgstr "發貨沒有分配庫存項目" -#: order/models.py:2446 +#: order/models.py:2477 msgid "Shipment must be checked before it can be completed" msgstr "發貨紀錄必須在完成前進行檢查" -#: order/models.py:2516 +#: order/models.py:2547 msgid "Sales Order Extra Line" msgstr "銷售訂單加行" -#: order/models.py:2545 +#: order/models.py:2576 msgid "Sales Order Allocation" msgstr "銷售訂單分配" -#: order/models.py:2568 order/models.py:2570 +#: order/models.py:2599 order/models.py:2601 msgid "Stock item has not been assigned" msgstr "庫存項目尚未分配" -#: order/models.py:2577 +#: order/models.py:2608 msgid "Cannot allocate stock item to a line with a different part" msgstr "無法將庫存項目分配給具有不同零件的行" -#: order/models.py:2580 +#: order/models.py:2611 msgid "Cannot allocate stock to a line without a part" msgstr "無法將庫存分配給沒有零件的生產線" -#: order/models.py:2583 +#: order/models.py:2614 msgid "Allocation quantity cannot exceed stock quantity" msgstr "分配數量不能超過庫存數量" -#: order/models.py:2599 +#: order/models.py:2630 msgid "Allocation quantity must be greater than zero" msgstr "分配的數量必須大於零" -#: order/models.py:2602 order/serializers.py:1668 +#: order/models.py:2633 order/serializers.py:1678 msgid "Quantity must be 1 for serialized stock item" msgstr "序列化庫存項目的數量必須為1" -#: order/models.py:2605 +#: order/models.py:2636 msgid "Sales order does not match shipment" msgstr "銷售訂單與發貨不匹配" -#: order/models.py:2606 plugin/base/barcodes/api.py:643 +#: order/models.py:2637 plugin/base/barcodes/api.py:643 msgid "Shipment does not match sales order" msgstr "發貨與銷售訂單不匹配" -#: order/models.py:2614 +#: order/models.py:2645 msgid "Line" msgstr "行" -#: order/models.py:2625 +#: order/models.py:2656 msgid "Sales order shipment reference" msgstr "銷售訂單發貨參考" -#: order/models.py:2638 order/models.py:3064 +#: order/models.py:2669 order/models.py:3095 msgid "Item" msgstr "項目" -#: order/models.py:2639 +#: order/models.py:2670 msgid "Select stock item to allocate" msgstr "選擇要分配的庫存項目" -#: order/models.py:2648 +#: order/models.py:2679 msgid "Enter stock allocation quantity" msgstr "輸入庫存分配數量" -#: order/models.py:2765 +#: order/models.py:2796 msgid "Return Order reference" msgstr "退貨訂單參考" -#: order/models.py:2777 +#: order/models.py:2808 msgid "Company from which items are being returned" msgstr "退回物品的公司" -#: order/models.py:2790 +#: order/models.py:2821 msgid "Return order status" msgstr "退貨訂單狀態" -#: order/models.py:3022 +#: order/models.py:3053 msgid "Return Order Line Item" msgstr "退貨訂單行項目" -#: order/models.py:3035 +#: order/models.py:3066 msgid "Stock item must be specified" msgstr "必須指定庫存項目" -#: order/models.py:3039 +#: order/models.py:3070 msgid "Return quantity exceeds stock quantity" msgstr "退回數量超過庫存數量" -#: order/models.py:3044 +#: order/models.py:3075 msgid "Return quantity must be greater than zero" msgstr "退回數量必須大於零" -#: order/models.py:3049 +#: order/models.py:3080 msgid "Invalid quantity for serialized stock item" msgstr "序列化庫存項目的數量無效" -#: order/models.py:3065 +#: order/models.py:3096 msgid "Select item to return from customer" msgstr "選擇要從客户處退回的商品" -#: order/models.py:3080 +#: order/models.py:3111 msgid "Received Date" msgstr "接收日期" -#: order/models.py:3081 +#: order/models.py:3112 msgid "The date this return item was received" msgstr "收到此退貨項目的日期" -#: order/models.py:3093 +#: order/models.py:3124 msgid "Outcome" msgstr "結果" -#: order/models.py:3094 +#: order/models.py:3125 msgid "Outcome for this line item" msgstr "該行項目的結果" -#: order/models.py:3101 +#: order/models.py:3132 msgid "Cost associated with return or repair for this line item" msgstr "與此行項目的退貨或維修相關的成本" -#: order/models.py:3111 +#: order/models.py:3142 msgid "Return Order Extra Line" msgstr "退貨訂單附加行" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "Order ID" msgstr "訂單ID" -#: order/serializers.py:75 +#: order/serializers.py:76 msgid "ID of the order to duplicate" msgstr "要複製的訂單ID" -#: order/serializers.py:81 +#: order/serializers.py:82 msgid "Copy Lines" msgstr "複製行" -#: order/serializers.py:82 +#: order/serializers.py:83 msgid "Copy line items from the original order" msgstr "從原始訂單複製行項目" -#: order/serializers.py:88 +#: order/serializers.py:89 msgid "Copy Extra Lines" msgstr "複製額外行" -#: order/serializers.py:89 +#: order/serializers.py:90 msgid "Copy extra line items from the original order" msgstr "從原始訂單複製額外的行項目" -#: order/serializers.py:95 part/serializers.py:416 +#: order/serializers.py:96 part/serializers.py:414 msgid "Copy Parameters" msgstr "複製參數" -#: order/serializers.py:96 +#: order/serializers.py:97 msgid "Copy order parameters from the original order" msgstr "從原始訂單複製訂單參數" -#: order/serializers.py:111 +#: order/serializers.py:112 #: 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:116 +#: order/serializers.py:117 msgid "Completed Lines" msgstr "已完成行項目" -#: order/serializers.py:184 +#: order/serializers.py:185 msgid "Duplicate Order" msgstr "複製訂單" -#: order/serializers.py:185 +#: order/serializers.py:186 msgid "Specify options for duplicating this order" msgstr "指定複製此訂單的選項" -#: order/serializers.py:264 +#: order/serializers.py:265 msgid "Invalid order ID" msgstr "訂單ID不正確" -#: order/serializers.py:444 +#: order/serializers.py:445 msgid "Supplier Name" msgstr "供應商名稱" -#: order/serializers.py:493 +#: order/serializers.py:494 msgid "Order cannot be cancelled" msgstr "訂單不能取消" -#: order/serializers.py:508 order/serializers.py:1689 +#: order/serializers.py:509 order/serializers.py:1699 msgid "Allow order to be closed with incomplete line items" msgstr "允許關閉行項目不完整的訂單" -#: order/serializers.py:518 order/serializers.py:1699 +#: order/serializers.py:519 order/serializers.py:1709 msgid "Order has incomplete line items" msgstr "訂單中的行項目不完整" -#: order/serializers.py:638 +#: order/serializers.py:639 msgid "Order is not open" msgstr "訂單未打開" -#: order/serializers.py:676 +#: order/serializers.py:677 msgid "Auto Pricing" msgstr "自動定價" -#: order/serializers.py:678 +#: order/serializers.py:679 msgid "Automatically calculate purchase price based on supplier part data" msgstr "根據供應商零件數據自動計算採購價格" -#: order/serializers.py:695 +#: order/serializers.py:696 msgid "Purchase price currency" msgstr "購買價格貨幣" -#: order/serializers.py:726 +#: order/serializers.py:727 msgid "Merge Items" msgstr "合併項目" -#: order/serializers.py:728 +#: order/serializers.py:729 msgid "Merge items with the same part, destination and target date into one line item" msgstr "將具有相同零件、目的地和目標日期的項目合併到一個行項目中" -#: order/serializers.py:735 part/serializers.py:485 +#: order/serializers.py:736 part/serializers.py:483 msgid "SKU" msgstr "庫存量單位" -#: order/serializers.py:749 part/models.py:1151 part/serializers.py:344 +#: order/serializers.py:750 part/models.py:1152 part/serializers.py:342 msgid "Internal Part Number" msgstr "內部零件編號" -#: order/serializers.py:757 +#: order/serializers.py:758 msgid "Internal Part Name" msgstr "內部零件名稱" -#: order/serializers.py:773 +#: order/serializers.py:774 msgid "Supplier part must be specified" msgstr "必須指定供應商零件" -#: order/serializers.py:776 +#: order/serializers.py:777 msgid "Purchase order must be specified" msgstr "必須指定採購訂單" -#: order/serializers.py:784 +#: order/serializers.py:785 msgid "Supplier must match purchase order" msgstr "供應商必須匹配採購訂單" -#: order/serializers.py:785 +#: order/serializers.py:786 msgid "Purchase order must match supplier" msgstr "採購訂單必須與供應商匹配" -#: order/serializers.py:837 order/serializers.py:1769 +#: order/serializers.py:838 order/serializers.py:1779 msgid "Line Item" msgstr "行項目" -#: order/serializers.py:846 order/serializers.py:986 order/serializers.py:2140 +#: order/serializers.py:847 order/serializers.py:987 order/serializers.py:2160 msgid "Select destination location for received items" msgstr "為收到的物品選擇目的地位置" -#: order/serializers.py:862 +#: order/serializers.py:863 msgid "Enter batch code for incoming stock items" msgstr "輸入入庫項目的批號" -#: order/serializers.py:869 stock/models.py:1167 +#: order/serializers.py:870 stock/models.py:1191 #: templates/email/stale_stock_notification.html:22 users/models.py:137 msgid "Expiry Date" msgstr "有效期至" -#: order/serializers.py:870 +#: order/serializers.py:871 msgid "Enter expiry date for incoming stock items" msgstr "輸入入庫庫存項目的到期日" -#: order/serializers.py:878 +#: order/serializers.py:879 msgid "Enter serial numbers for incoming stock items" msgstr "輸入入庫庫存項目的序列號" -#: order/serializers.py:888 +#: order/serializers.py:889 msgid "Override packaging information for incoming stock items" msgstr "覆蓋傳入庫存項目的包裝資料" -#: order/serializers.py:896 order/serializers.py:2145 +#: order/serializers.py:897 order/serializers.py:2165 msgid "Additional note for incoming stock items" msgstr "傳入庫存項目的附加説明" -#: order/serializers.py:903 +#: order/serializers.py:904 msgid "Barcode" msgstr "條形碼" -#: order/serializers.py:904 +#: order/serializers.py:905 msgid "Scanned barcode" msgstr "掃描條形碼" -#: order/serializers.py:920 +#: order/serializers.py:921 msgid "Barcode is already in use" msgstr "條形碼已被使用" -#: order/serializers.py:1003 order/serializers.py:2164 +#: order/serializers.py:1004 order/serializers.py:2184 msgid "Line items must be provided" msgstr "必須提供行項目" -#: order/serializers.py:1022 +#: order/serializers.py:1023 msgid "Destination location must be specified" msgstr "必須指定目標位置" -#: order/serializers.py:1029 +#: order/serializers.py:1030 msgid "Supplied barcode values must be unique" msgstr "提供的條形碼值必須是唯一的" -#: order/serializers.py:1154 +#: order/serializers.py:1155 msgid "Shipments" msgstr "配送紀錄" -#: order/serializers.py:1158 +#: order/serializers.py:1159 msgid "Completed Shipments" msgstr "完成配送" -#: order/serializers.py:1162 +#: order/serializers.py:1163 msgid "Allocated Lines" msgstr "已分配行" -#: order/serializers.py:1355 +#: order/serializers.py:1356 msgid "Sale price currency" msgstr "售出價格貨幣" -#: order/serializers.py:1402 +#: order/serializers.py:1403 msgid "Allocated Items" msgstr "已分配項目" -#: order/serializers.py:1600 +#: order/serializers.py:1601 msgid "No shipment details provided" msgstr "未提供裝運詳細信息" -#: order/serializers.py:1632 order/serializers.py:1778 +#: order/serializers.py:1633 order/serializers.py:1788 msgid "Line item is not associated with this order" msgstr "行項目與此訂單不關聯" -#: order/serializers.py:1651 +#: order/serializers.py:1652 msgid "Quantity must be positive" msgstr "數量必須為正" -#: order/serializers.py:1788 +#: order/serializers.py:1673 +msgid "Stock item has not passed all required tests" +msgstr "" + +#: order/serializers.py:1798 msgid "Enter serial numbers to allocate" msgstr "輸入要分配的序列號" -#: order/serializers.py:1810 order/serializers.py:1930 +#: order/serializers.py:1820 order/serializers.py:1950 msgid "Shipment has already been shipped" msgstr "貨物已發出" -#: order/serializers.py:1813 order/serializers.py:1933 +#: order/serializers.py:1823 order/serializers.py:1953 msgid "Shipment is not associated with this order" msgstr "發貨與此訂單無關" -#: order/serializers.py:1868 +#: order/serializers.py:1886 msgid "No match found for the following serial numbers" msgstr "未找到以下序列號的匹配項" -#: order/serializers.py:1875 +#: order/serializers.py:1893 msgid "The following serial numbers are unavailable" msgstr "以下序列號不可用" -#: order/serializers.py:2106 +#: order/serializers.py:2126 msgid "Return order line item" msgstr "退貨訂單行項目" -#: order/serializers.py:2116 +#: order/serializers.py:2136 msgid "Line item does not match return order" msgstr "行項目與退貨訂單不匹配" -#: order/serializers.py:2119 +#: order/serializers.py:2139 msgid "Line item has already been received" msgstr "行項目已收到" -#: order/serializers.py:2156 +#: order/serializers.py:2176 msgid "Items can only be received against orders which are in progress" msgstr "只能根據正在進行的訂單接收物品" -#: order/serializers.py:2232 +#: order/serializers.py:2252 msgid "Quantity to return" msgstr "退回數量" -#: order/serializers.py:2257 +#: order/serializers.py:2277 msgid "Line price currency" msgstr "行價格貨幣" @@ -5756,59 +5829,63 @@ msgstr "是修訂版本" msgid "Has Revisions" msgstr "有修訂版本" -#: part/api.py:853 +#: part/api.py:870 msgid "BOM Valid" msgstr "物料清單合規" -#: part/api.py:962 +#: part/api.py:979 msgid "Cascade Categories" msgstr "級聯類別" -#: part/api.py:963 +#: part/api.py:980 msgid "If true, include items in child categories of the given category" msgstr "若為 true,則包含給定類別的子類別中的項目" -#: part/api.py:969 +#: part/api.py:986 msgid "Filter by numeric category ID or the literal 'null'" msgstr "依數字類別 ID 或常值 'null' 篩選" -#: part/api.py:1281 +#: part/api.py:1299 msgid "Assembly part is active" msgstr "組件零件處於作用中狀態" -#: part/api.py:1285 +#: part/api.py:1303 msgid "Assembly part is trackable" msgstr "組件零件可追蹤" -#: part/api.py:1289 +#: part/api.py:1307 msgid "Assembly part is testable" msgstr "裝配部份是可測試的" -#: part/api.py:1294 +#: part/api.py:1311 +msgid "Assembly part is locked" +msgstr "" + +#: part/api.py:1316 msgid "Component part is active" msgstr "子零件處於作用中狀態" -#: part/api.py:1298 +#: part/api.py:1320 msgid "Component part is trackable" msgstr "子零件可追蹤" -#: part/api.py:1302 +#: part/api.py:1324 msgid "Component part is testable" msgstr "組件部份是可測試的" -#: part/api.py:1306 +#: part/api.py:1328 msgid "Component part is an assembly" msgstr "子零件是一個組件" -#: part/api.py:1310 +#: part/api.py:1332 msgid "Component part is virtual" msgstr "子零件是虛擬的" -#: part/api.py:1314 +#: part/api.py:1336 msgid "Has available stock" msgstr "有可用庫存" -#: part/api.py:1371 +#: part/api.py:1393 msgid "Uses" msgstr "使用" @@ -5821,7 +5898,7 @@ msgstr "零件類別" msgid "Part Categories" msgstr "零件類別" -#: part/models.py:111 part/models.py:1187 +#: part/models.py:111 part/models.py:1188 msgid "Default Location" msgstr "默認位置" @@ -5849,7 +5926,7 @@ msgstr "此類別零件的默認關鍵字" msgid "Icon" msgstr "圖標" -#: part/models.py:137 part/serializers.py:154 part/serializers.py:173 +#: part/models.py:137 part/serializers.py:152 part/serializers.py:171 #: stock/models.py:187 msgid "Icon (optional)" msgstr "圖標(可選)" @@ -5870,984 +5947,1012 @@ msgstr "默認值" msgid "Default Parameter Value" msgstr "默認參數值" -#: part/models.py:528 part/serializers.py:114 users/ruleset.py:29 +#: part/models.py:529 part/serializers.py:112 users/ruleset.py:29 msgid "Parts" msgstr "零件" -#: part/models.py:574 +#: part/models.py:575 msgid "Cannot delete parameters of a locked part" msgstr "無法刪除已鎖定零件的參數" -#: part/models.py:579 +#: part/models.py:580 msgid "Cannot modify parameters of a locked part" msgstr "無法修改已鎖定零件的參數" -#: part/models.py:590 +#: part/models.py:591 msgid "Cannot delete this part as it is locked" msgstr "無法刪除這個零件,因為它已被鎖定" -#: part/models.py:593 +#: part/models.py:594 msgid "Cannot delete this part as it is still active" msgstr "無法刪除這個零件,因為它仍然處於活動狀態" -#: part/models.py:598 +#: part/models.py:599 msgid "Cannot delete this part as it is used in an assembly" msgstr "無法刪除這個零件,因為它被使用在了裝配中" -#: part/models.py:682 part/models.py:689 +#: part/models.py:683 part/models.py:690 #, python-brace-format msgid "Part '{self}' cannot be used in BOM for '{parent}' (recursive)" msgstr "零件 \"{self}\" 不能用在 \"{parent}\" 的物料清單 (遞歸)" -#: part/models.py:701 +#: part/models.py:702 #, python-brace-format msgid "Part '{parent}' is used in BOM for '{self}' (recursive)" msgstr "零件 \"{parent}\" 被使用在了 \"{self}\" 的物料清單 (遞歸)" -#: part/models.py:768 +#: part/models.py:769 #, python-brace-format msgid "IPN must match regex pattern {pattern}" msgstr "內部零件號必須匹配正則表達式 {pattern}" -#: part/models.py:776 +#: part/models.py:777 msgid "Part cannot be a revision of itself" msgstr "零件不能是對自身的修訂" -#: part/models.py:783 +#: part/models.py:784 msgid "Revision code must be specified for a part marked as a revision" msgstr "標記為修訂版的零件必須指定修訂版代碼" -#: part/models.py:791 +#: part/models.py:792 msgid "Revisions are only allowed for assembly parts" msgstr "修訂僅對裝配零件允許" -#: part/models.py:798 +#: part/models.py:799 msgid "Cannot make a revision of a template part" msgstr "無法對模版零件進行修訂" -#: part/models.py:804 +#: part/models.py:805 msgid "Parent part must point to the same template" msgstr "上級零件必須指向相同的模版" -#: part/models.py:901 +#: part/models.py:902 msgid "Stock item with this serial number already exists" msgstr "該序列號庫存項己存在" -#: part/models.py:1031 +#: part/models.py:1032 msgid "Duplicate IPN not allowed in part settings" msgstr "在零件設置中不允許重複的內部零件號" -#: part/models.py:1044 +#: part/models.py:1045 msgid "Duplicate part revision already exists." msgstr "重複的零件修訂版本已經存在。" -#: part/models.py:1054 +#: part/models.py:1055 msgid "Part with this Name, IPN and Revision already exists." msgstr "有這個名字,內部零件號,和修訂版本的零件已經存在" -#: part/models.py:1069 +#: part/models.py:1070 msgid "Parts cannot be assigned to structural part categories!" msgstr "零件不能分配到結構性零件類別!" -#: part/models.py:1101 +#: part/models.py:1102 msgid "Part name" msgstr "零件名稱" -#: part/models.py:1106 +#: part/models.py:1107 msgid "Is Template" msgstr "是模板" -#: part/models.py:1107 +#: part/models.py:1108 msgid "Is this part a template part?" msgstr "這個零件是一個模版零件嗎?" -#: part/models.py:1117 +#: part/models.py:1118 msgid "Is this part a variant of another part?" msgstr "這個零件是另一零件的變體嗎?" -#: part/models.py:1118 +#: part/models.py:1119 msgid "Variant Of" msgstr "變體" -#: part/models.py:1125 +#: part/models.py:1126 msgid "Part description (optional)" msgstr "零件描述(可選)" -#: part/models.py:1132 +#: part/models.py:1133 msgid "Keywords" msgstr "關鍵詞" -#: part/models.py:1133 +#: part/models.py:1134 msgid "Part keywords to improve visibility in search results" msgstr "提高搜索結果可見性的零件關鍵字" -#: part/models.py:1143 +#: part/models.py:1144 msgid "Part category" msgstr "零件類別" -#: part/models.py:1150 part/serializers.py:831 +#: part/models.py:1151 part/serializers.py:828 #: report/templates/report/inventree_stock_location_report.html:103 msgid "IPN" msgstr "內部零件號 IPN" -#: part/models.py:1158 +#: part/models.py:1159 msgid "Part revision or version number" msgstr "零件修訂版本或版本號" -#: part/models.py:1159 report/models.py:231 +#: part/models.py:1160 report/models.py:231 msgid "Revision" msgstr "版本" -#: part/models.py:1168 +#: part/models.py:1169 msgid "Is this part a revision of another part?" msgstr "這零件是另一零件的修訂版本嗎?" -#: part/models.py:1169 +#: part/models.py:1170 msgid "Revision Of" msgstr "修訂版本" -#: part/models.py:1185 +#: part/models.py:1186 msgid "Where is this item normally stored?" msgstr "該物品通常存放在哪裏?" -#: part/models.py:1222 +#: part/models.py:1223 msgid "Default Expiry" msgstr "默認到期" -#: part/models.py:1223 +#: part/models.py:1224 msgid "Expiry time (in days) for stock items of this part" msgstr "此零件庫存項的過期時間 (天)" -#: part/models.py:1231 part/serializers.py:901 +#: part/models.py:1232 part/serializers.py:898 msgid "Minimum Stock" msgstr "最低庫存" -#: part/models.py:1232 +#: part/models.py:1233 msgid "Minimum allowed stock level" msgstr "允許的最小庫存量" -#: part/models.py:1241 +#: part/models.py:1241 part/serializers.py:902 +msgid "Maximum Stock" +msgstr "" + +#: part/models.py:1242 +msgid "Maximum allowed stock level" +msgstr "" + +#: part/models.py:1251 msgid "Units of measure for this part" msgstr "此零件的計量單位" -#: part/models.py:1248 +#: part/models.py:1258 msgid "Can this part be built from other parts?" msgstr "這個零件可由其他零件加工而成嗎?" -#: part/models.py:1254 +#: part/models.py:1264 msgid "Can this part be used to build other parts?" msgstr "這個零件可用於創建其他零件嗎?" -#: part/models.py:1260 +#: part/models.py:1270 msgid "Does this part have tracking for unique items?" msgstr "此零件是否有唯一物品的追蹤功能" -#: part/models.py:1266 +#: part/models.py:1276 msgid "Can this part have test results recorded against it?" msgstr "這一部分能否記錄到測試結果?" -#: part/models.py:1272 +#: part/models.py:1282 msgid "Can this part be purchased from external suppliers?" msgstr "這個零件可從外部供應商購買嗎?" -#: part/models.py:1278 +#: part/models.py:1288 msgid "Can this part be sold to customers?" msgstr "此零件可以銷售給客户嗎?" -#: part/models.py:1282 +#: part/models.py:1292 msgid "Is this part active?" msgstr "這個零件是否已激活?" -#: part/models.py:1288 +#: part/models.py:1298 msgid "Locked parts cannot be edited" msgstr "無法編輯鎖定的零件" -#: part/models.py:1294 +#: part/models.py:1304 msgid "Is this a virtual part, such as a software product or license?" msgstr "這是一個虛擬零件,例如一個軟件產品或許可證嗎?" -#: part/models.py:1299 +#: part/models.py:1309 msgid "BOM Validated" msgstr "BOM 已驗證" -#: part/models.py:1300 +#: part/models.py:1310 msgid "Is the BOM for this part valid?" msgstr "此零件的 BOM 是否已通過驗證?" -#: part/models.py:1306 +#: part/models.py:1316 msgid "BOM checksum" msgstr "物料清單校驗和" -#: part/models.py:1307 +#: part/models.py:1317 msgid "Stored BOM checksum" msgstr "保存的物料清單校驗和" -#: part/models.py:1315 +#: part/models.py:1325 msgid "BOM checked by" msgstr "物料清單檢查人" -#: part/models.py:1320 +#: part/models.py:1330 msgid "BOM checked date" msgstr "物料清單檢查日期" -#: part/models.py:1336 +#: part/models.py:1346 msgid "Creation User" msgstr "新建用户" -#: part/models.py:1346 +#: part/models.py:1356 msgid "Owner responsible for this part" msgstr "此零件的負責人" -#: part/models.py:2308 +#: part/models.py:2318 msgid "Sell multiple" msgstr "出售多個" -#: part/models.py:3317 +#: part/models.py:3327 msgid "Currency used to cache pricing calculations" msgstr "用於緩存定價計算的貨幣" -#: part/models.py:3333 +#: part/models.py:3343 msgid "Minimum BOM Cost" msgstr "最低物料清單成本" -#: part/models.py:3334 +#: part/models.py:3344 msgid "Minimum cost of component parts" msgstr "元件的最低成本" -#: part/models.py:3340 +#: part/models.py:3350 msgid "Maximum BOM Cost" msgstr "物料清單的最高成本" -#: part/models.py:3341 +#: part/models.py:3351 msgid "Maximum cost of component parts" msgstr "元件的最高成本" -#: part/models.py:3347 +#: part/models.py:3357 msgid "Minimum Purchase Cost" msgstr "最低購買成本" -#: part/models.py:3348 +#: part/models.py:3358 msgid "Minimum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3354 +#: part/models.py:3364 msgid "Maximum Purchase Cost" msgstr "最大購買成本" -#: part/models.py:3355 +#: part/models.py:3365 msgid "Maximum historical purchase cost" msgstr "最高歷史購買成本" -#: part/models.py:3361 +#: part/models.py:3371 msgid "Minimum Internal Price" msgstr "最低內部價格" -#: part/models.py:3362 +#: part/models.py:3372 msgid "Minimum cost based on internal price breaks" msgstr "基於內部批發價的最低成本" -#: part/models.py:3368 +#: part/models.py:3378 msgid "Maximum Internal Price" msgstr "最大內部價格" -#: part/models.py:3369 +#: part/models.py:3379 msgid "Maximum cost based on internal price breaks" msgstr "基於內部批發價的最高成本" -#: part/models.py:3375 +#: part/models.py:3385 msgid "Minimum Supplier Price" msgstr "供應商最低價格" -#: part/models.py:3376 +#: part/models.py:3386 msgid "Minimum price of part from external suppliers" msgstr "外部供應商零件的最低價格" -#: part/models.py:3382 +#: part/models.py:3392 msgid "Maximum Supplier Price" msgstr "供應商最高價格" -#: part/models.py:3383 +#: part/models.py:3393 msgid "Maximum price of part from external suppliers" msgstr "來自外部供應商的商零件的最高價格" -#: part/models.py:3389 +#: part/models.py:3399 msgid "Minimum Variant Cost" msgstr "最小變體成本" -#: part/models.py:3390 +#: part/models.py:3400 msgid "Calculated minimum cost of variant parts" msgstr "計算出的變體零件的最低成本" -#: part/models.py:3396 +#: part/models.py:3406 msgid "Maximum Variant Cost" msgstr "最大變體成本" -#: part/models.py:3397 +#: part/models.py:3407 msgid "Calculated maximum cost of variant parts" msgstr "計算出的變體零件的最大成本" -#: part/models.py:3403 part/models.py:3417 +#: part/models.py:3413 part/models.py:3427 msgid "Minimum Cost" msgstr "最低成本" -#: part/models.py:3404 +#: part/models.py:3414 msgid "Override minimum cost" msgstr "覆蓋最低成本" -#: part/models.py:3410 part/models.py:3424 +#: part/models.py:3420 part/models.py:3434 msgid "Maximum Cost" msgstr "最高成本" -#: part/models.py:3411 +#: part/models.py:3421 msgid "Override maximum cost" msgstr "覆蓋最大成本" -#: part/models.py:3418 +#: part/models.py:3428 msgid "Calculated overall minimum cost" msgstr "計算總最低成本" -#: part/models.py:3425 +#: part/models.py:3435 msgid "Calculated overall maximum cost" msgstr "計算總最大成本" -#: part/models.py:3431 +#: part/models.py:3441 msgid "Minimum Sale Price" msgstr "最低售出價格" -#: part/models.py:3432 +#: part/models.py:3442 msgid "Minimum sale price based on price breaks" msgstr "基於批發價的最低售出價格" -#: part/models.py:3438 +#: part/models.py:3448 msgid "Maximum Sale Price" msgstr "最高售出價格" -#: part/models.py:3439 +#: part/models.py:3449 msgid "Maximum sale price based on price breaks" msgstr "基於批發價的最大售出價格" -#: part/models.py:3445 +#: part/models.py:3455 msgid "Minimum Sale Cost" msgstr "最低銷售成本" -#: part/models.py:3446 +#: part/models.py:3456 msgid "Minimum historical sale price" msgstr "歷史最低售出價格" -#: part/models.py:3452 +#: part/models.py:3462 msgid "Maximum Sale Cost" msgstr "最高銷售成本" -#: part/models.py:3453 +#: part/models.py:3463 msgid "Maximum historical sale price" msgstr "歷史最高售出價格" -#: part/models.py:3471 +#: part/models.py:3481 msgid "Part for stocktake" msgstr "用於盤點的零件" -#: part/models.py:3476 +#: part/models.py:3486 msgid "Item Count" msgstr "物品數量" -#: part/models.py:3477 +#: part/models.py:3487 msgid "Number of individual stock entries at time of stocktake" msgstr "盤點時的個別庫存條目數" -#: part/models.py:3485 +#: part/models.py:3495 msgid "Total available stock at time of stocktake" msgstr "盤點時可用庫存總額" -#: part/models.py:3489 report/templates/report/inventree_test_report.html:106 -#: stock/models.py:3105 +#: part/models.py:3499 report/templates/report/inventree_test_report.html:106 +#: stock/models.py:3129 msgid "Date" msgstr "日期" -#: part/models.py:3490 +#: part/models.py:3500 msgid "Date stocktake was performed" msgstr "進行盤點的日期" -#: part/models.py:3497 +#: part/models.py:3507 msgid "Minimum Stock Cost" msgstr "最低庫存成本" -#: part/models.py:3498 +#: part/models.py:3508 msgid "Estimated minimum cost of stock on hand" msgstr "現有存庫存最低成本估算" -#: part/models.py:3504 +#: part/models.py:3514 msgid "Maximum Stock Cost" msgstr "最高庫存成本" -#: part/models.py:3505 +#: part/models.py:3515 msgid "Estimated maximum cost of stock on hand" msgstr "目前庫存最高成本估算" -#: part/models.py:3515 +#: part/models.py:3525 msgid "Part Sale Price Break" msgstr "零件售出價格折扣" -#: part/models.py:3629 +#: part/models.py:3639 msgid "Part Test Template" msgstr "零件測試模板" -#: part/models.py:3655 +#: part/models.py:3665 msgid "Invalid template name - must include at least one alphanumeric character" msgstr "模板名稱無效 - 必須包含至少一個字母或者數字" -#: part/models.py:3687 +#: part/models.py:3697 msgid "Test templates can only be created for testable parts" msgstr "測試模板只能為可拆分的部件創建" -#: part/models.py:3701 +#: part/models.py:3711 msgid "Test template with the same key already exists for part" msgstr "零件已存在具有相同主鍵的測試模板" -#: part/models.py:3718 +#: part/models.py:3728 msgid "Test Name" msgstr "測試名" -#: part/models.py:3719 +#: part/models.py:3729 msgid "Enter a name for the test" msgstr "輸入測試的名稱" -#: part/models.py:3725 +#: part/models.py:3735 msgid "Test Key" msgstr "測試主鍵" -#: part/models.py:3726 +#: part/models.py:3736 msgid "Simplified key for the test" msgstr "簡化測試主鍵" -#: part/models.py:3733 +#: part/models.py:3743 msgid "Test Description" msgstr "測試説明" -#: part/models.py:3734 +#: part/models.py:3744 msgid "Enter description for this test" msgstr "輸入測試的描述" -#: part/models.py:3738 +#: part/models.py:3748 msgid "Is this test enabled?" msgstr "此測試是否已啓用?" -#: part/models.py:3743 +#: part/models.py:3753 msgid "Required" msgstr "必須的" -#: part/models.py:3744 +#: part/models.py:3754 msgid "Is this test required to pass?" msgstr "需要此測試才能通過嗎?" -#: part/models.py:3749 +#: part/models.py:3759 msgid "Requires Value" msgstr "需要值" -#: part/models.py:3750 +#: part/models.py:3760 msgid "Does this test require a value when adding a test result?" msgstr "添加測試結果時是否需要一個值?" -#: part/models.py:3755 +#: part/models.py:3765 msgid "Requires Attachment" msgstr "需要附件" -#: part/models.py:3757 +#: part/models.py:3767 msgid "Does this test require a file attachment when adding a test result?" msgstr "添加測試結果時是否需要文件附件?" -#: part/models.py:3764 +#: part/models.py:3774 msgid "Valid choices for this test (comma-separated)" msgstr "此測試的有效選擇 (逗號分隔)" -#: part/models.py:3961 +#: part/models.py:3918 +msgid "Invalid quantity - no units specified for part" +msgstr "" + +#: part/models.py:3927 +msgid "Quantity must be greater than or equal to zero" +msgstr "數量必須大於或等於零" + +#: part/models.py:4023 msgid "BOM item cannot be modified - assembly is locked" msgstr "物料清單項目不能被修改 - 裝配已鎖定" -#: part/models.py:3968 +#: part/models.py:4030 msgid "BOM item cannot be modified - variant assembly is locked" msgstr "物料清單項目不能修改 - 變體裝配已鎖定" -#: part/models.py:3978 +#: part/models.py:4040 msgid "Select parent part" msgstr "選擇父零件" -#: part/models.py:3988 +#: part/models.py:4050 msgid "Sub part" msgstr "子零件" -#: part/models.py:3989 +#: part/models.py:4051 msgid "Select part to be used in BOM" msgstr "選擇要用於物料清單的零件" -#: part/models.py:4000 +#: part/models.py:4057 part/serializers.py:1688 +msgid "Amount" +msgstr "" + +#: part/models.py:4058 +msgid "Amount of sub-part consumed to produce one part" +msgstr "" + +#: part/models.py:4070 msgid "BOM quantity for this BOM item" msgstr "此物料清單項目的數量" -#: part/models.py:4006 +#: part/models.py:4076 msgid "This BOM item is optional" msgstr "此物料清單項目是可選的" -#: part/models.py:4012 +#: part/models.py:4082 msgid "This BOM item is consumable (it is not tracked in build orders)" msgstr "這個物料清單項目是耗材 (它沒有在生產訂單中被追蹤)" -#: part/models.py:4020 +#: part/models.py:4090 msgid "Setup Quantity" msgstr "建置額外數量" -#: part/models.py:4021 +#: part/models.py:4091 msgid "Extra required quantity for a build, to account for setup losses" msgstr "為彌補建置 / 開工損耗所需的額外數量" -#: part/models.py:4029 +#: part/models.py:4099 msgid "Attrition" msgstr "損耗率" -#: part/models.py:4031 +#: part/models.py:4101 msgid "Estimated attrition for a build, expressed as a percentage (0-100)" msgstr "製造預估損耗(百分比 0–100)" -#: part/models.py:4042 +#: part/models.py:4112 msgid "Rounding Multiple" msgstr "進位倍數" -#: part/models.py:4044 +#: part/models.py:4114 msgid "Round up required production quantity to nearest multiple of this value" msgstr "將所需生產數量向上取整到此數值的整數倍" -#: part/models.py:4052 +#: part/models.py:4122 msgid "BOM item reference" msgstr "物料清單項目引用" -#: part/models.py:4060 +#: part/models.py:4130 msgid "BOM item notes" msgstr "物料清單項目註釋" -#: part/models.py:4066 +#: part/models.py:4136 msgid "Checksum" msgstr "校驗和" -#: part/models.py:4067 +#: part/models.py:4137 msgid "BOM line checksum" msgstr "物料清單行校驗和" -#: part/models.py:4072 +#: part/models.py:4142 msgid "Validated" msgstr "已驗證" -#: part/models.py:4073 +#: part/models.py:4143 msgid "This BOM item has been validated" msgstr "此物料清單項目已驗證" -#: part/models.py:4078 +#: part/models.py:4148 msgid "Gets inherited" msgstr "獲取繼承的" -#: part/models.py:4079 +#: part/models.py:4149 msgid "This BOM item is inherited by BOMs for variant parts" msgstr "此物料清單項目是由物料清單繼承的變體零件" -#: part/models.py:4085 +#: part/models.py:4155 msgid "Stock items for variant parts can be used for this BOM item" msgstr "變體零件的庫存項可以用於此物料清單項目" -#: part/models.py:4194 stock/models.py:932 +#: part/models.py:4262 stock/models.py:956 msgid "Quantity must be integer value for trackable parts" msgstr "可追蹤零件的數量必須是整數" -#: part/models.py:4204 part/models.py:4206 +#: part/models.py:4272 part/models.py:4274 msgid "Sub part must be specified" msgstr "必須指定子零件" -#: part/models.py:4357 +#: part/models.py:4425 msgid "BOM Item Substitute" msgstr "物料清單項目替代品" -#: part/models.py:4378 +#: part/models.py:4446 msgid "Substitute part cannot be the same as the master part" msgstr "替代品零件不能與主零件相同" -#: part/models.py:4391 +#: part/models.py:4459 msgid "Parent BOM item" msgstr "上級物料清單項目" -#: part/models.py:4399 +#: part/models.py:4467 msgid "Substitute part" msgstr "替代品零件" -#: part/models.py:4415 +#: part/models.py:4483 msgid "Part 1" msgstr "零件 1" -#: part/models.py:4423 +#: part/models.py:4491 msgid "Part 2" msgstr "零件2" -#: part/models.py:4424 +#: part/models.py:4492 msgid "Select Related Part" msgstr "選擇相關的零件" -#: part/models.py:4431 +#: part/models.py:4499 msgid "Note for this relationship" msgstr "此關係的備註" -#: part/models.py:4450 +#: part/models.py:4518 msgid "Part relationship cannot be created between a part and itself" msgstr "零件關係不能在零件和自身之間創建" -#: part/models.py:4455 +#: part/models.py:4523 msgid "Duplicate relationship already exists" msgstr "複製關係已經存在" -#: part/serializers.py:109 +#: part/serializers.py:107 msgid "Parent Category" msgstr "上級類別" -#: part/serializers.py:110 +#: part/serializers.py:108 msgid "Parent part category" msgstr "上級零件類別" -#: part/serializers.py:118 part/serializers.py:170 +#: part/serializers.py:116 part/serializers.py:168 msgid "Subcategories" msgstr "子類別" -#: part/serializers.py:209 +#: part/serializers.py:207 msgid "Results" msgstr "結果" -#: part/serializers.py:210 +#: part/serializers.py:208 msgid "Number of results recorded against this template" msgstr "根據該模板記錄的結果數量" -#: part/serializers.py:241 part/serializers.py:259 stock/serializers.py:672 +#: part/serializers.py:239 part/serializers.py:257 stock/serializers.py:672 msgid "Purchase currency of this stock item" msgstr "購買此庫存項的貨幣" -#: part/serializers.py:286 +#: part/serializers.py:284 msgid "File is not an image" msgstr "檔案不是圖片" -#: part/serializers.py:396 +#: part/serializers.py:394 msgid "Original Part" msgstr "原始零件" -#: part/serializers.py:397 +#: part/serializers.py:395 msgid "Select original part to duplicate" msgstr "選擇要複製的原始零件" -#: part/serializers.py:402 +#: part/serializers.py:400 msgid "Copy Image" msgstr "複製圖片" -#: part/serializers.py:403 +#: part/serializers.py:401 msgid "Copy image from original part" msgstr "從原零件複製圖片" -#: part/serializers.py:409 +#: part/serializers.py:407 msgid "Copy BOM" msgstr "複製物料清單" -#: part/serializers.py:410 +#: part/serializers.py:408 msgid "Copy bill of materials from original part" msgstr "從原始零件複製材料清單" -#: part/serializers.py:417 +#: part/serializers.py:415 msgid "Copy parameter data from original part" msgstr "從原始零件複製參數數據" -#: part/serializers.py:423 +#: part/serializers.py:421 msgid "Copy Notes" msgstr "複製備註" -#: part/serializers.py:424 +#: part/serializers.py:422 msgid "Copy notes from original part" msgstr "從原始零件複製備註" -#: part/serializers.py:430 +#: part/serializers.py:428 msgid "Copy Tests" msgstr "複製測試模板" -#: part/serializers.py:431 +#: part/serializers.py:429 msgid "Copy test templates from original part" msgstr "從原始零件複製測試模板" -#: part/serializers.py:449 +#: part/serializers.py:447 msgid "Initial Stock Quantity" msgstr "初始化庫存數量" -#: part/serializers.py:451 +#: part/serializers.py:449 msgid "Specify initial stock quantity for this Part. If quantity is zero, no stock is added." msgstr "指定此零件的初始庫存數量。如果數量為零,則不添加任何庫存。" -#: part/serializers.py:458 +#: part/serializers.py:456 msgid "Initial Stock Location" msgstr "初始化庫存地點" -#: part/serializers.py:459 +#: part/serializers.py:457 msgid "Specify initial stock location for this Part" msgstr "初始化指定此零件的庫存地點" -#: part/serializers.py:476 +#: part/serializers.py:474 msgid "Select supplier (or leave blank to skip)" msgstr "選擇供應商(或為空以跳過)" -#: part/serializers.py:492 +#: part/serializers.py:490 msgid "Select manufacturer (or leave blank to skip)" msgstr "選擇製造商(或為空)" -#: part/serializers.py:502 +#: part/serializers.py:500 msgid "Manufacturer part number" msgstr "製造商零件號" -#: part/serializers.py:509 +#: part/serializers.py:507 msgid "Selected company is not a valid supplier" msgstr "所選公司不是一個有效的供應商" -#: part/serializers.py:518 +#: part/serializers.py:516 msgid "Selected company is not a valid manufacturer" msgstr "所選公司不是一個有效的製造商" -#: part/serializers.py:529 +#: part/serializers.py:527 msgid "Manufacturer part matching this MPN already exists" msgstr "與此製造商零件編號 (MPN) 的相匹配的製造商零件已存在" -#: part/serializers.py:536 +#: part/serializers.py:534 msgid "Supplier part matching this SKU already exists" msgstr "匹配此庫存單位 (SKU) 的供應商零件已存在" -#: part/serializers.py:816 +#: part/serializers.py:813 msgid "Category Name" msgstr "類別名稱" -#: part/serializers.py:845 +#: part/serializers.py:842 msgid "Building" msgstr "正在生產" -#: part/serializers.py:846 +#: part/serializers.py:843 msgid "Quantity of this part currently being in production" msgstr "此零件目前生產中數量" -#: part/serializers.py:853 +#: part/serializers.py:850 msgid "Outstanding quantity of this part scheduled to be built" msgstr "此零件排程待製造未完成數量" -#: part/serializers.py:873 stock/serializers.py:1048 stock/serializers.py:1231 +#: part/serializers.py:870 stock/serializers.py:1048 stock/serializers.py:1231 #: users/ruleset.py:32 msgid "Stock Items" msgstr "庫存項" -#: part/serializers.py:877 +#: part/serializers.py:874 msgid "Revisions" msgstr "修訂" -#: part/serializers.py:881 part/serializers.py:1188 +#: part/serializers.py:878 part/serializers.py:1177 #: templates/email/low_stock_notification.html:16 #: templates/email/part_event_notification.html:17 msgid "Total Stock" msgstr "庫存總量" -#: part/serializers.py:889 +#: part/serializers.py:886 msgid "Unallocated Stock" msgstr "未分配的庫存" -#: part/serializers.py:897 +#: part/serializers.py:894 msgid "Variant Stock" msgstr "變體庫存" -#: part/serializers.py:968 +#: part/serializers.py:969 msgid "Duplicate Part" msgstr "重複零件" -#: part/serializers.py:969 +#: part/serializers.py:970 msgid "Copy initial data from another Part" msgstr "從另一個零件複製初始數據" -#: part/serializers.py:975 +#: part/serializers.py:976 msgid "Initial Stock" msgstr "初始庫存" -#: part/serializers.py:976 +#: part/serializers.py:977 msgid "Create Part with initial stock quantity" msgstr "創建具有初始庫存數量的零件" -#: part/serializers.py:982 +#: part/serializers.py:983 msgid "Supplier Information" msgstr "供應商信息" -#: part/serializers.py:983 +#: part/serializers.py:984 msgid "Add initial supplier information for this part" msgstr "添加此零件的初始供應商信息" -#: part/serializers.py:992 +#: part/serializers.py:993 msgid "Copy Category Parameters" msgstr "複製類別參數" -#: part/serializers.py:993 +#: part/serializers.py:994 msgid "Copy parameter templates from selected part category" msgstr "從選擇的零件複製參數模版" -#: part/serializers.py:998 +#: part/serializers.py:999 msgid "Existing Image" msgstr "現有的圖片" -#: part/serializers.py:999 +#: part/serializers.py:1000 msgid "Filename of an existing part image" msgstr "現有零件圖片的文件名" -#: part/serializers.py:1016 +#: part/serializers.py:1017 msgid "Image file does not exist" msgstr "圖片不存在" -#: part/serializers.py:1160 +#: part/serializers.py:1149 msgid "Validate entire Bill of Materials" msgstr "驗證整個物料清單" -#: part/serializers.py:1194 part/serializers.py:1802 +#: part/serializers.py:1183 part/serializers.py:1779 msgid "Can Build" msgstr "可以創建" -#: part/serializers.py:1211 +#: part/serializers.py:1200 msgid "Required for Build Orders" msgstr "生產工單需求數" -#: part/serializers.py:1216 +#: part/serializers.py:1205 msgid "Allocated to Build Orders" msgstr "已分配至生產工單" -#: part/serializers.py:1223 +#: part/serializers.py:1212 msgid "Required for Sales Orders" msgstr "銷售訂單需求數" -#: part/serializers.py:1227 +#: part/serializers.py:1216 msgid "Allocated to Sales Orders" msgstr "已分配至銷售訂單" -#: part/serializers.py:1287 +#: part/serializers.py:1276 msgid "Part IPN" msgstr "零件 IPN" -#: part/serializers.py:1294 +#: part/serializers.py:1283 msgid "Part Description" msgstr "零件描述" -#: part/serializers.py:1338 +#: part/serializers.py:1327 msgid "Select a part to generate stocktake information for that part (and any variant parts)" msgstr "選擇一個零件以產生該零件 (及其任何變體零件) 的盤點資訊" -#: part/serializers.py:1348 +#: part/serializers.py:1337 msgid "Select a category to include all parts within that category (and subcategories)" msgstr "選擇一個類別以包含該類別 (及其子類別) 內的所有零件" -#: part/serializers.py:1358 +#: part/serializers.py:1347 msgid "Select a location to include all parts with stock in that location (including sub-locations)" msgstr "選擇一個位置以包含該位置 (及其子位置) 內所有有庫存的零件" -#: part/serializers.py:1365 +#: part/serializers.py:1354 msgid "Generate Stocktake Entries" msgstr "產生盤點項目" -#: part/serializers.py:1366 +#: part/serializers.py:1355 msgid "Save stocktake entries for the selected parts" msgstr "儲存選定零件的盤點項目" -#: part/serializers.py:1373 +#: part/serializers.py:1362 msgid "Generate Report" msgstr "產製報表" -#: part/serializers.py:1374 +#: part/serializers.py:1363 msgid "Generate a stocktake report for the selected parts" msgstr "產製選定零件的庫存報表" -#: part/serializers.py:1477 +#: part/serializers.py:1466 msgid "Minimum Price" msgstr "最低價格" -#: part/serializers.py:1478 +#: part/serializers.py:1467 msgid "Override calculated value for minimum price" msgstr "覆蓋已計算的最低價格值" -#: part/serializers.py:1485 +#: part/serializers.py:1474 msgid "Minimum price currency" msgstr "最低價格貨幣" -#: part/serializers.py:1492 +#: part/serializers.py:1481 msgid "Maximum Price" msgstr "最高價格" -#: part/serializers.py:1493 +#: part/serializers.py:1482 msgid "Override calculated value for maximum price" msgstr "覆蓋已計算的最高價格值" -#: part/serializers.py:1500 +#: part/serializers.py:1489 msgid "Maximum price currency" msgstr "最高價格貨幣" -#: part/serializers.py:1529 +#: part/serializers.py:1518 msgid "Update" msgstr "更新" -#: part/serializers.py:1530 +#: part/serializers.py:1519 msgid "Update pricing for this part" msgstr "更新這個零件的價格" -#: part/serializers.py:1553 +#: part/serializers.py:1542 #, python-brace-format msgid "Could not convert from provided currencies to {default_currency}" msgstr "無法將所提供的貨幣轉換為 {default_currency}" -#: part/serializers.py:1560 +#: part/serializers.py:1549 msgid "Minimum price must not be greater than maximum price" msgstr "最低價格不能高於最高價格。" -#: part/serializers.py:1563 +#: part/serializers.py:1552 msgid "Maximum price must not be less than minimum price" msgstr "最高價格不能低於最低價格" -#: part/serializers.py:1716 -msgid "Quantity must be greater than or equal to zero" -msgstr "數量必須大於或等於零" +#: part/serializers.py:1689 +msgid "Amount required for this item (can include units)" +msgstr "" -#: part/serializers.py:1729 +#: part/serializers.py:1706 msgid "Select the parent assembly" msgstr "選擇父裝配" -#: part/serializers.py:1764 +#: part/serializers.py:1741 msgid "Select the component part" msgstr "選擇零部件" -#: part/serializers.py:1991 +#: part/serializers.py:1861 +msgid "Invalid quantity format" +msgstr "" + +#: part/serializers.py:1989 msgid "Select part to copy BOM from" msgstr "選擇要複製物料清單的零件" -#: part/serializers.py:1999 +#: part/serializers.py:1997 msgid "Remove Existing Data" msgstr "移除現有數據" -#: part/serializers.py:2000 +#: part/serializers.py:1998 msgid "Remove existing BOM items before copying" msgstr "複製前刪除現有的物料清單項目" -#: part/serializers.py:2005 +#: part/serializers.py:2003 msgid "Include Inherited" msgstr "包含繼承的" -#: part/serializers.py:2006 +#: part/serializers.py:2004 msgid "Include BOM items which are inherited from templated parts" msgstr "包含從模板零件繼承的物料清單項目" -#: part/serializers.py:2011 +#: part/serializers.py:2009 msgid "Skip Invalid Rows" msgstr "跳過無效行" -#: part/serializers.py:2012 +#: part/serializers.py:2010 msgid "Enable this option to skip invalid rows" msgstr "啓用此選項以跳過無效行" -#: part/serializers.py:2017 +#: part/serializers.py:2015 msgid "Copy Substitute Parts" msgstr "複製替代品零件" -#: part/serializers.py:2018 +#: part/serializers.py:2016 msgid "Copy substitute parts when duplicate BOM items" msgstr "複製物料清單項目時複製替代品零件" @@ -7099,15 +7204,15 @@ msgstr "待分配數" msgid "Label printing failed" msgstr "標籤打印失敗" -#: plugin/base/label/mixins.py:53 +#: plugin/base/label/mixins.py:56 msgid "Error rendering label to PDF" msgstr "渲染標籤到 PDF 時出錯" -#: plugin/base/label/mixins.py:67 +#: plugin/base/label/mixins.py:73 msgid "Error rendering label to HTML" msgstr "渲染標籤到 HTML 時出錯" -#: plugin/base/label/mixins.py:144 +#: plugin/base/label/mixins.py:156 msgid "No items provided to print" msgstr "沒有要打印的項目" @@ -7168,7 +7273,7 @@ msgstr "提供條形碼本地支持" #: plugin/builtin/integration/currency_exchange.py:21 #: plugin/builtin/integration/machine_types.py:17 #: plugin/builtin/integration/part_notifications.py:21 -#: plugin/builtin/labels/inventree_label.py:26 +#: plugin/builtin/labels/inventree_label.py:27 #: plugin/builtin/labels/inventree_machine.py:64 #: plugin/builtin/labels/label_sheet.py:72 #: plugin/builtin/suppliers/digikey.py:20 plugin/builtin/suppliers/lcsc.py:22 @@ -7514,20 +7619,20 @@ msgstr "零件變更通知" msgid "The part `{part.name}` has been triggered with a `{part_action}` event" msgstr "零件 `{part.name}` 觸發 `{part_action}` 事件" -#: plugin/builtin/labels/inventree_label.py:23 +#: plugin/builtin/labels/inventree_label.py:24 msgid "InvenTree PDF label printer" msgstr "InvenTree PDF 標籤打印機" -#: plugin/builtin/labels/inventree_label.py:24 +#: plugin/builtin/labels/inventree_label.py:25 msgid "Provides native support for printing PDF labels" msgstr "為打印 PDF 標籤提供本機支持" -#: plugin/builtin/labels/inventree_label.py:32 +#: plugin/builtin/labels/inventree_label.py:33 #: plugin/builtin/labels/label_sheet.py:78 msgid "Debug mode" msgstr "Debug模式" -#: plugin/builtin/labels/inventree_label.py:33 +#: plugin/builtin/labels/inventree_label.py:34 #: plugin/builtin/labels/label_sheet.py:79 msgid "Enable debug mode - returns raw HTML instead of PDF" msgstr "啓用Debug模式 - 返回原始的 HTML 而不是 PDF" @@ -7568,7 +7673,7 @@ msgstr "邊框" msgid "Print a border around each label" msgstr "打印每個標籤的邊框" -#: plugin/builtin/labels/label_sheet.py:49 report/models.py:390 +#: plugin/builtin/labels/label_sheet.py:49 report/models.py:392 msgid "Landscape" msgstr "橫屏模式" @@ -8029,7 +8134,7 @@ msgstr "插件不支持標籤打印" msgid "Invalid label dimensions" msgstr "無效的標籤尺寸" -#: report/api.py:183 report/api.py:271 +#: report/api.py:183 report/api.py:272 msgid "No valid items provided to template" msgstr "沒有有效的項目提供到模板" @@ -8073,112 +8178,112 @@ msgstr "打印時附加到模型" msgid "Save report output as an attachment against linked model instance when printing" msgstr "打印時將報告輸出保存為附件與鏈接模型實例" -#: report/models.py:284 +#: report/models.py:286 msgid "Filename Pattern" msgstr "文件名樣式" -#: report/models.py:285 +#: report/models.py:287 msgid "Pattern for generating filenames" msgstr "生成文件名模式" -#: report/models.py:290 +#: report/models.py:292 msgid "Template is enabled" msgstr "模板已啓用" -#: report/models.py:297 +#: report/models.py:299 msgid "Target model type for template" msgstr "模版的目標模型類型" -#: report/models.py:317 +#: report/models.py:319 msgid "Filters" msgstr "篩選器" -#: report/models.py:318 +#: report/models.py:320 msgid "Template query filters (comma-separated list of key=value pairs)" msgstr "模版查詢篩選器 (逗號分隔的鍵值對列表)" -#: report/models.py:377 report/models.py:673 +#: report/models.py:379 report/models.py:700 msgid "Template file" msgstr "模板包文件" -#: report/models.py:385 +#: report/models.py:387 msgid "Page size for PDF reports" msgstr "PDF 報告的頁面大小" -#: report/models.py:391 +#: report/models.py:393 msgid "Render report in landscape orientation" msgstr "橫向渲染報告" -#: report/models.py:396 +#: report/models.py:398 msgid "Merge" msgstr "合併" -#: report/models.py:397 +#: report/models.py:399 msgid "Render a single report against selected items" msgstr "針對所選項目產出合併單一報告" -#: report/models.py:452 +#: report/models.py:466 #, python-brace-format msgid "Report generated from template {self.name}" msgstr "由模板 {self.name} 產生的報告" -#: report/models.py:549 report/models.py:588 report/models.py:589 +#: report/models.py:576 report/models.py:615 report/models.py:616 msgid "Template syntax error" msgstr "模板語法錯誤" -#: report/models.py:556 report/models.py:595 +#: report/models.py:583 report/models.py:622 msgid "Error rendering report" msgstr "報告渲染錯誤" -#: report/models.py:615 +#: report/models.py:643 msgid "Error generating report" msgstr "生成報告錯誤" -#: report/models.py:647 +#: report/models.py:674 msgid "Error merging report outputs" msgstr "合併報告輸出時發生錯誤" -#: report/models.py:679 +#: report/models.py:706 msgid "Width [mm]" msgstr "寬度 [mm]" -#: report/models.py:680 +#: report/models.py:707 msgid "Label width, specified in mm" msgstr "標籤寬度,以毫米為單位。" -#: report/models.py:686 +#: report/models.py:713 msgid "Height [mm]" msgstr "高度 [mm]" -#: report/models.py:687 +#: report/models.py:714 msgid "Label height, specified in mm" msgstr "標籤高度,以毫米為單位。" -#: report/models.py:792 +#: report/models.py:828 msgid "Error printing labels" msgstr "列印標籤時發生錯誤" -#: report/models.py:811 +#: report/models.py:847 msgid "Snippet" msgstr "代碼片段" -#: report/models.py:812 +#: report/models.py:848 msgid "Report snippet file" msgstr "報告代碼片段文件" -#: report/models.py:819 +#: report/models.py:855 msgid "Snippet file description" msgstr "代碼片段文件描述" -#: report/models.py:837 +#: report/models.py:873 msgid "Asset" msgstr "資產" -#: report/models.py:838 +#: report/models.py:874 msgid "Report asset file" msgstr "報告資產文件" -#: report/models.py:845 +#: report/models.py:881 msgid "Asset file description" msgstr "資產文件描述" @@ -8275,7 +8380,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:1090 +#: report/templates/report/inventree_test_report.html:88 stock/models.py:1114 #: stock/serializers.py:164 templates/email/stale_stock_notification.html:21 msgid "Serial Number" msgstr "序列號" @@ -8538,7 +8643,7 @@ msgstr "庫存地點類型" msgid "Default icon for all locations that have no icon set (optional)" msgstr "為所有沒有圖標的位置設置默認圖標(可選)" -#: stock/models.py:147 stock/models.py:1052 +#: stock/models.py:147 stock/models.py:1076 msgid "Stock Location" msgstr "庫存地點" @@ -8546,11 +8651,11 @@ msgstr "庫存地點" msgid "Stock Locations" msgstr "庫存地點" -#: stock/models.py:197 stock/models.py:1217 +#: stock/models.py:197 stock/models.py:1241 msgid "Owner" msgstr "所有者" -#: stock/models.py:198 stock/models.py:1218 +#: stock/models.py:198 stock/models.py:1242 msgid "Select Owner" msgstr "選擇所有者" @@ -8558,7 +8663,7 @@ msgstr "選擇所有者" msgid "Stock items may not be directly located into a structural stock locations, but may be located to child locations." msgstr "庫存項可能不直接位於結構庫存地點,但可能位於其子地點。" -#: stock/models.py:213 users/models.py:497 +#: stock/models.py:213 users/models.py:495 msgid "External" msgstr "外部" @@ -8578,274 +8683,282 @@ msgstr "該位置的庫存地點類型" msgid "You cannot make this stock location structural because some stock items are already located into it!" msgstr "您不能將此庫存地點設置為結構性,因為某些庫存項已經位於它!" -#: stock/models.py:585 +#: stock/models.py:537 +msgid "Serialized stock items cannot be deleted" +msgstr "" + +#: stock/models.py:674 #, python-brace-format msgid "{field} does not exist" msgstr "{field} 不存在" -#: stock/models.py:598 +#: stock/models.py:687 msgid "Part must be specified" msgstr "必須指定零件" -#: stock/models.py:911 +#: stock/models.py:924 msgid "Stock items cannot be located into structural stock locations!" msgstr "庫存項不能存放在結構性庫存地點!" -#: stock/models.py:938 stock/serializers.py:469 +#: stock/models.py:945 +msgid "Editing of serial numbers is not allowed - this item has already been assigned a serial number" +msgstr "" + +#: stock/models.py:962 stock/serializers.py:469 msgid "Stock item cannot be created for virtual parts" msgstr "無法為虛擬零件創建庫存項" -#: stock/models.py:955 +#: stock/models.py:979 #, python-brace-format msgid "Part type ('{self.supplier_part.part}') must be {self.part}" msgstr "零件類型 ('{self.supplier_part.part}') 必須為 {self.part}" -#: stock/models.py:965 stock/models.py:978 +#: stock/models.py:989 stock/models.py:1002 msgid "Quantity must be 1 for item with a serial number" msgstr "有序列號的項目的數量必須是1" -#: stock/models.py:968 +#: stock/models.py:992 msgid "Serial number cannot be set if quantity greater than 1" msgstr "如果數量大於1,則不能設置序列號" -#: stock/models.py:990 +#: stock/models.py:1014 msgid "Item cannot belong to itself" msgstr "項目不能屬於其自身" -#: stock/models.py:995 +#: stock/models.py:1019 msgid "Item must have a build reference if is_building=True" msgstr "如果is_building=True,則項必須具有構建引用" -#: stock/models.py:1008 +#: stock/models.py:1032 msgid "Build reference does not point to the same part object" msgstr "構建引用未指向同一零件對象" -#: stock/models.py:1022 +#: stock/models.py:1046 msgid "Parent Stock Item" msgstr "母庫存項目" -#: stock/models.py:1034 +#: stock/models.py:1058 msgid "Base part" msgstr "基礎零件" -#: stock/models.py:1044 +#: stock/models.py:1068 msgid "Select a matching supplier part for this stock item" msgstr "為此庫存項目選擇匹配的供應商零件" -#: stock/models.py:1056 +#: stock/models.py:1080 msgid "Where is this stock item located?" msgstr "這個庫存物品在哪裏?" -#: stock/models.py:1064 stock/serializers.py:1682 +#: stock/models.py:1088 stock/serializers.py:1682 msgid "Packaging this stock item is stored in" msgstr "包裝此庫存物品存儲在" -#: stock/models.py:1070 +#: stock/models.py:1094 msgid "Installed In" msgstr "安裝於" -#: stock/models.py:1075 +#: stock/models.py:1099 msgid "Is this item installed in another item?" msgstr "此項目是否安裝在另一個項目中?" -#: stock/models.py:1094 +#: stock/models.py:1118 msgid "Serial number for this item" msgstr "此項目的序列號" -#: stock/models.py:1111 stock/serializers.py:1667 +#: stock/models.py:1135 stock/serializers.py:1667 msgid "Batch code for this stock item" msgstr "此庫存項的批號" -#: stock/models.py:1116 +#: stock/models.py:1140 msgid "Stock Quantity" msgstr "庫存數量" -#: stock/models.py:1126 +#: stock/models.py:1150 msgid "Source Build" msgstr "源代碼構建" -#: stock/models.py:1129 +#: stock/models.py:1153 msgid "Build for this stock item" msgstr "為此庫存項目構建" -#: stock/models.py:1136 +#: stock/models.py:1160 msgid "Consumed By" msgstr "消費者" -#: stock/models.py:1139 +#: stock/models.py:1163 msgid "Build order which consumed this stock item" msgstr "構建消耗此庫存項的生產訂單" -#: stock/models.py:1148 +#: stock/models.py:1172 msgid "Source Purchase Order" msgstr "採購訂單來源" -#: stock/models.py:1152 +#: stock/models.py:1176 msgid "Purchase order for this stock item" msgstr "此庫存商品的採購訂單" -#: stock/models.py:1158 +#: stock/models.py:1182 msgid "Destination Sales Order" msgstr "目的地銷售訂單" -#: stock/models.py:1169 +#: stock/models.py:1193 msgid "Expiry date for stock item. Stock will be considered expired after this date" msgstr "庫存物品的到期日。在此日期之後,庫存將被視為過期" -#: stock/models.py:1187 +#: stock/models.py:1211 msgid "Delete on deplete" msgstr "耗盡時刪除" -#: stock/models.py:1188 +#: stock/models.py:1212 msgid "Delete this Stock Item when stock is depleted" msgstr "當庫存耗盡時刪除此庫存項" -#: stock/models.py:1209 +#: stock/models.py:1233 msgid "Single unit purchase price at time of purchase" msgstr "購買時一個單位的價格" -#: stock/models.py:1240 +#: stock/models.py:1264 msgid "Converted to part" msgstr "轉換為零件" -#: stock/models.py:1442 +#: stock/models.py:1466 msgid "Quantity exceeds available stock" msgstr "數量超過可用庫存" -#: stock/models.py:1893 +#: stock/models.py:1917 msgid "Part is not set as trackable" msgstr "零件未設置為可跟蹤" -#: stock/models.py:1899 +#: stock/models.py:1923 msgid "Quantity must be integer" msgstr "數量必須是整數" -#: stock/models.py:1907 +#: stock/models.py:1931 #, python-brace-format msgid "Quantity must not exceed available stock quantity ({self.quantity})" msgstr "數量不得超過現有庫存量 ({self.quantity})" -#: stock/models.py:1913 +#: stock/models.py:1937 msgid "Serial numbers must be provided as a list" msgstr "序列號需以清單提供" -#: stock/models.py:1918 +#: stock/models.py:1942 msgid "Quantity does not match serial numbers" msgstr "數量不匹配序列號" -#: stock/models.py:1936 +#: stock/models.py:1960 msgid "Cannot assign stock to structural location" msgstr "無法將庫存分配到結構位置" -#: stock/models.py:2053 stock/models.py:3023 +#: stock/models.py:2077 stock/models.py:3047 msgid "Test template does not exist" msgstr "測試模板不存在" -#: stock/models.py:2071 +#: stock/models.py:2095 msgid "Stock item has been assigned to a sales order" msgstr "庫存項已分配到銷售訂單" -#: stock/models.py:2075 +#: stock/models.py:2099 msgid "Stock item is installed in another item" msgstr "庫存項已安裝在另一個項目中" -#: stock/models.py:2078 +#: stock/models.py:2102 msgid "Stock item contains other items" msgstr "庫存項包含其他項目" -#: stock/models.py:2081 +#: stock/models.py:2105 msgid "Stock item has been assigned to a customer" msgstr "庫存項已分配給客户" -#: stock/models.py:2084 stock/models.py:2270 +#: stock/models.py:2108 stock/models.py:2294 msgid "Stock item is currently in production" msgstr "庫存項目前正在生產" -#: stock/models.py:2087 +#: stock/models.py:2111 msgid "Serialized stock cannot be merged" msgstr "序列化的庫存不能合併" -#: stock/models.py:2094 stock/serializers.py:1537 +#: stock/models.py:2118 stock/serializers.py:1537 msgid "Duplicate stock items" msgstr "複製庫存項" -#: stock/models.py:2098 +#: stock/models.py:2122 msgid "Stock items must refer to the same part" msgstr "庫存項必須指相同零件" -#: stock/models.py:2106 +#: stock/models.py:2130 msgid "Stock items must refer to the same supplier part" msgstr "庫存項必須是同一供應商的零件" -#: stock/models.py:2111 +#: stock/models.py:2135 msgid "Stock status codes must match" msgstr "庫存狀態碼必須匹配" -#: stock/models.py:2411 +#: stock/models.py:2435 msgid "StockItem cannot be moved as it is not in stock" msgstr "庫存項不能移動,因為它沒有庫存" -#: stock/models.py:2905 +#: stock/models.py:2929 msgid "Stock Item Tracking" msgstr "庫存項跟蹤" -#: stock/models.py:2955 +#: stock/models.py:2979 msgid "Entry notes" msgstr "條目註釋" -#: stock/models.py:2995 +#: stock/models.py:3019 msgid "Stock Item Test Result" msgstr "庫存項測試結果" -#: stock/models.py:3026 +#: stock/models.py:3050 msgid "Value must be provided for this test" msgstr "必須為此測試提供值" -#: stock/models.py:3030 +#: stock/models.py:3054 msgid "Attachment must be uploaded for this test" msgstr "測試附件必須上傳" -#: stock/models.py:3035 +#: stock/models.py:3059 msgid "Invalid value for this test" msgstr "此測試的值無效" -#: stock/models.py:3059 +#: stock/models.py:3083 msgid "Test result" msgstr "測試結果" -#: stock/models.py:3066 +#: stock/models.py:3090 msgid "Test output value" msgstr "測試輸出值" -#: stock/models.py:3074 stock/serializers.py:259 +#: stock/models.py:3098 stock/serializers.py:259 msgid "Test result attachment" msgstr "測驗結果附件" -#: stock/models.py:3078 +#: stock/models.py:3102 msgid "Test notes" msgstr "測試備註" -#: stock/models.py:3086 +#: stock/models.py:3110 msgid "Test station" msgstr "測試站" -#: stock/models.py:3087 +#: stock/models.py:3111 msgid "The identifier of the test station where the test was performed" msgstr "進行測試的測試站的標識符" -#: stock/models.py:3093 +#: stock/models.py:3117 msgid "Started" msgstr "已開始" -#: stock/models.py:3094 +#: stock/models.py:3118 msgid "The timestamp of the test start" msgstr "測試開始的時間戳" -#: stock/models.py:3100 +#: stock/models.py:3124 msgid "Finished" msgstr "已完成" -#: stock/models.py:3101 +#: stock/models.py:3125 msgid "The timestamp of the test finish" msgstr "測試結束的時間戳" @@ -8929,7 +9042,7 @@ msgstr "輸入新項目的序列號" msgid "Supplier Part Number" msgstr "供應商零件編號" -#: stock/serializers.py:652 users/models.py:187 +#: stock/serializers.py:652 users/models.py:185 msgid "Expired" msgstr "已過期" @@ -9466,131 +9579,131 @@ msgstr "最近使用令牌的時間" msgid "Revoked" msgstr "撤銷" -#: users/models.py:229 +#: users/models.py:227 msgid "Permission set" msgstr "權限設置" -#: users/models.py:242 +#: users/models.py:240 msgid "View" msgstr "查看" -#: users/models.py:242 +#: users/models.py:240 msgid "Permission to view items" msgstr "查看項目的權限" -#: users/models.py:246 +#: users/models.py:244 msgid "Add" msgstr "添加" -#: users/models.py:246 +#: users/models.py:244 msgid "Permission to add items" msgstr "添加項目的權限" -#: users/models.py:250 +#: users/models.py:248 msgid "Change" msgstr "更改" -#: users/models.py:252 +#: users/models.py:250 msgid "Permissions to edit items" msgstr "編輯項目的權限" -#: users/models.py:256 +#: users/models.py:254 msgid "Delete" msgstr "刪除" -#: users/models.py:258 +#: users/models.py:256 msgid "Permission to delete items" msgstr "刪除項目的權限" -#: users/models.py:495 +#: users/models.py:493 msgid "Bot" msgstr "機器人" -#: users/models.py:496 +#: users/models.py:494 msgid "Internal" msgstr "內部" -#: users/models.py:498 +#: users/models.py:496 msgid "Guest" msgstr "訪客" -#: users/models.py:507 +#: users/models.py:505 msgid "Language" msgstr "語言 LANG" -#: users/models.py:508 +#: users/models.py:506 msgid "Preferred language for the user" msgstr "使用者偏好語言" -#: users/models.py:513 +#: users/models.py:511 msgid "Theme" msgstr "主題" -#: users/models.py:514 +#: users/models.py:512 msgid "Settings for the web UI as JSON - do not edit manually!" msgstr "Web 介面設定(JSON,請勿手動編輯)" -#: users/models.py:519 +#: users/models.py:517 msgid "Widgets" msgstr "小工具" -#: users/models.py:521 +#: users/models.py:519 msgid "Settings for the dashboard widgets as JSON - do not edit manually!" msgstr "儀表板小工具設定(JSON,請勿手動編輯)" -#: users/models.py:528 +#: users/models.py:526 msgid "Display Name" msgstr "顯示名稱" -#: users/models.py:529 +#: users/models.py:527 msgid "Chosen display name for the user" msgstr "使用者自選顯示名稱" -#: users/models.py:535 +#: users/models.py:533 msgid "Position" msgstr "職稱" -#: users/models.py:536 +#: users/models.py:534 msgid "Main job title or position" msgstr "主要職稱或職位" -#: users/models.py:543 +#: users/models.py:541 msgid "User status message" msgstr "使用者狀態訊息" -#: users/models.py:550 +#: users/models.py:548 msgid "User location information" msgstr "使用者位置資訊" -#: users/models.py:555 +#: users/models.py:553 msgid "User is actively using the system" msgstr "使用者目前活躍" -#: users/models.py:562 +#: users/models.py:560 msgid "Preferred contact information for the user" msgstr "使用者偏好聯絡資訊" -#: users/models.py:568 +#: users/models.py:566 msgid "User Type" msgstr "使用者類型" -#: users/models.py:569 +#: users/models.py:567 msgid "Which type of user is this?" msgstr "此為哪種類型的使用者?" -#: users/models.py:575 +#: users/models.py:573 msgid "Organisation" msgstr "組織" -#: users/models.py:576 +#: users/models.py:574 msgid "Users primary organisation/affiliation" msgstr "使用者主要所屬組織" -#: users/models.py:584 +#: users/models.py:582 msgid "Primary Group" msgstr "主要群組" -#: users/models.py:585 +#: users/models.py:583 msgid "Primary group for the user" msgstr "使用者的主要群組" diff --git a/src/backend/InvenTree/machine/api.py b/src/backend/InvenTree/machine/api.py index 0092622ed7..bea28dfcfd 100644 --- a/src/backend/InvenTree/machine/api.py +++ b/src/backend/InvenTree/machine/api.py @@ -58,11 +58,11 @@ class MachineDetail(RetrieveUpdateDestroyAPI): def get_machine(machine_pk): """Get machine by pk. - Raises: - NotFound: If machine is not found - Returns: BaseMachineType: The machine instance in the registry + + Raises: + NotFound: If machine is not found """ machine = registry.get_machine(machine_pk) diff --git a/src/backend/InvenTree/machine/test_api.py b/src/backend/InvenTree/machine/test_api.py index 20e9330542..32a2809d2f 100644 --- a/src/backend/InvenTree/machine/test_api.py +++ b/src/backend/InvenTree/machine/test_api.py @@ -147,7 +147,7 @@ class MachineAPITest(TestMachineRegistryMixin, InvenTreeAPITestCase): def test_machine_detail(self): """Test machine detail API endpoint.""" - self.assertFalse(len(MachineConfig.objects.all()), 0) + self.assertFalse(MachineConfig.objects.count(), 0) self.get( reverse('api-machine-detail', kwargs={'pk': self.placeholder_uuid}), expected_code=404, @@ -185,7 +185,7 @@ class MachineAPITest(TestMachineRegistryMixin, InvenTreeAPITestCase): response = self.delete( reverse('api-machine-detail', kwargs={'pk': pk}), expected_code=204 ) - self.assertFalse(len(MachineConfig.objects.all()), 0) + self.assertFalse(MachineConfig.objects.count(), 0) # Create machine where the driver does not exist machine_data['driver'] = 'non-existent-driver' diff --git a/src/backend/InvenTree/order/admin.py b/src/backend/InvenTree/order/admin.py index 70b7b3c13b..875ebdb763 100644 --- a/src/backend/InvenTree/order/admin.py +++ b/src/backend/InvenTree/order/admin.py @@ -170,3 +170,41 @@ class ReturnOrderLineItemAdmin(admin.ModelAdmin): @admin.register(models.ReturnOrderExtraLine) class ReturnOrdeerExtraLineAdmin(GeneralExtraLineAdmin, admin.ModelAdmin): """Admin class for the ReturnOrderExtraLine model.""" + + +class TransferOrderLineItemInlineAdmin(admin.StackedInline): + """Inline admin class for the TransferOrderLineItem model.""" + + autocomplete_fields = ['part'] + + model = models.TransferOrderLineItem + extra = 0 + + +@admin.register(models.TransferOrder) +class TransferOrderAdmin(admin.ModelAdmin): + """Admin class for the TransferOrder model.""" + + exclude = ['reference_int', 'address', 'contact'] + + list_display = ( + 'reference', + 'status', + 'description', + 'take_from', + 'destination', + 'consume', + 'creation_date', + ) + + search_fields = ['reference', 'description'] + + inlines = [TransferOrderLineItemInlineAdmin] + + autocomplete_fields = [ + 'created_by', + 'take_from', + 'destination', + 'project_code', + 'responsible', + ] diff --git a/src/backend/InvenTree/order/api.py b/src/backend/InvenTree/order/api.py index 7ad506bc9e..709cf3ba26 100644 --- a/src/backend/InvenTree/order/api.py +++ b/src/backend/InvenTree/order/api.py @@ -56,6 +56,8 @@ from order.status_codes import ( ReturnOrderStatus, SalesOrderStatus, SalesOrderStatusGroups, + TransferOrderStatus, + TransferOrderStatusGroups, ) from part.models import Part from users.models import Owner @@ -84,6 +86,8 @@ class GeneralExtraLineList(SerializerContextMixin, DataExportViewMixin): ordering_fields = ['quantity', 'notes', 'reference', 'line'] + ordering_field_aliases = {'line': ['line_int', 'line']} + search_fields = ['quantity', 'notes', 'reference', 'description'] filterset_fields = ['order'] @@ -717,7 +721,7 @@ class PurchaseOrderLineItemList( 'order': 'order__reference', 'status': 'order__status', 'complete_date': 'order__complete_date', - 'line': ['line', 'part__SKU'], + 'line': ['line_int', 'line', 'part__SKU'], } ordering_fields = [ @@ -1077,7 +1081,7 @@ class SalesOrderLineItemList( 'part': 'part__name', 'IPN': 'part__IPN', 'order': 'order__reference', - 'line': ['line', 'part__name'], + 'line': ['line_int', 'line', 'part__name'], } search_fields = ['part__name', 'quantity', 'reference'] @@ -1728,7 +1732,7 @@ class ReturnOrderLineItemList( ] ordering_field_aliases = { - 'line': ['line', 'item__part__name'], + 'line': ['line_int', 'line', 'item__part__name'], 'part': 'item__part__name', 'IPN': 'item__part__IPN', 'stock': ['item__quantity', 'item__serial_int', 'item__serial'], @@ -1764,6 +1768,521 @@ class ReturnOrderExtraLineDetail(RetrieveUpdateDestroyAPI): serializer_class = serializers.ReturnOrderExtraLineSerializer +class TransferOrderFilter(OrderFilter): + """Custom API filters for the TransferOrderList endpoint.""" + + class Meta: + """Metaclass options.""" + + model = models.TransferOrder + fields = [] + + include_variants = rest_filters.BooleanFilter( + label=_('Include Variants'), method='filter_include_variants' + ) + + def filter_include_variants(self, queryset, name, value): + """Filter by whether or not to include variants of the selected part. + + Note: + - This filter does nothing by itself, and requires the 'part' filter to be set. + - Refer to the 'filter_part' method for more information. + """ + return queryset + + part = rest_filters.ModelChoiceFilter( + queryset=Part.objects.all(), field_name='part', method='filter_part' + ) + + @extend_schema_field(OpenApiTypes.INT) + def filter_part(self, queryset, name, part): + """Filter by selected 'part'. + + Note: + - If 'include_variants' is set to True, then all variants of the selected part will be included. + - Otherwise, just filter by the selected part. + """ + include_variants = str2bool(self.data.get('include_variants', False)) + + if include_variants: + parts = part.get_descendants(include_self=True) + else: + parts = Part.objects.filter(pk=part.pk) + + # Now that we have a queryset of parts, find all the matching return orders + line_items = models.TransferOrderLineItem.objects.filter(part__in=parts) + + # Generate a list of ID values for the matching transfer orders + transfer_orders = line_items.values_list('order', flat=True).distinct() + + # Now we have a list of matching IDs, filter the queryset + return queryset.filter(pk__in=transfer_orders) + + completed_before = InvenTreeDateFilter( + label=_('Completed Before'), field_name='complete_date', lookup_expr='lt' + ) + + completed_after = InvenTreeDateFilter( + label=_('Completed After'), field_name='complete_date', lookup_expr='gt' + ) + + +class TransferOrderMixin(SerializerContextMixin): + """Mixin class for TransferOrder endpoints.""" + + queryset = models.TransferOrder.objects.all() + serializer_class = serializers.TransferOrderSerializer + + def get_queryset(self, *args, **kwargs): + """Return annotated queryset for this endpoint.""" + queryset = super().get_queryset(*args, **kwargs) + queryset = serializers.TransferOrderSerializer.annotate_queryset(queryset) + queryset = queryset.prefetch_related('created_by', 'responsible') + + return queryset + + +class TransferOrderList( + TransferOrderMixin, + OrderCreateMixin, + DataExportViewMixin, + OutputOptionsMixin, + ParameterListMixin, + ListCreateAPI, +): + """API endpoint for accessing a list of TransferOrder objects.""" + + filterset_class = TransferOrderFilter + filter_backends = SEARCH_ORDER_FILTER + + # TODO: + # output_options = TransferOrderOutputOptions + + ordering_field_aliases = { + 'reference': ['reference_int', 'reference'], + 'project_code': ['project_code__code'], + } + + ordering_fields = [ + 'creation_date', + 'created_by', + 'reference', + 'line_items', + 'status', + 'start_date', + 'target_date', + 'complete_date', + 'project_code', + ] + + search_fields = ['reference', 'description', 'project_code__code'] + + ordering = '-reference' + + +class TransferOrderDetail( + TransferOrderMixin, OutputOptionsMixin, RetrieveUpdateDestroyAPI +): + """API endpoint for detail view of a single TransferOrder object.""" + + # output_options = TransferOrderOutputOptions + + +class TransferOrderContextMixin: + """Simple mixin class to add a TransferOrder to the serializer context.""" + + queryset = models.TransferOrder.objects.all() + + def get_serializer_context(self): + """Add the TransferOrder object to the serializer context.""" + context = super().get_serializer_context() + + # Pass the Transfer instance through to the serializer for validation + try: + context['order'] = models.TransferOrder.objects.get( + pk=self.kwargs.get('pk', None) + ) + except Exception: + pass + + context['request'] = self.request + + return context + + +class TransferOrderCancel(TransferOrderContextMixin, CreateAPI): + """API endpoint to cancel a TransferOrder.""" + + serializer_class = serializers.TransferOrderCancelSerializer + + +class TransferOrderHold(TransferOrderContextMixin, CreateAPI): + """API endpoint to hold a TransferOrder.""" + + serializer_class = serializers.TransferOrderHoldSerializer + + +class TransferOrderComplete(TransferOrderContextMixin, CreateAPI): + """API endpoint to complete a TransferOrder.""" + + serializer_class = serializers.TransferOrderCompleteSerializer + + +class TransferOrderIssue(TransferOrderContextMixin, CreateAPI): + """API endpoint to issue a Transfer Order.""" + + serializer_class = serializers.TransferOrderIssueSerializer + + +class TransferOrderAllocateSerials(TransferOrderContextMixin, CreateAPI): + """API endpoint to allocation stock items against a TransferOrder, by specifying serial numbers.""" + + queryset = models.TransferOrder.objects.none() + serializer_class = serializers.TransferOrderSerialAllocationSerializer + + +class TransferOrderAllocate(TransferOrderContextMixin, CreateAPI): + """API endpoint to allocate stock items against a TransferOrder. + + - The TransferOrder is specified in the URL + - See the TransferOrderAllocationSerializer class + """ + + queryset = models.TransferOrder.objects.none() + serializer_class = serializers.TransferOrderLineItemAllocationSerializer + + +class TransferOrderAllocationFilter(FilterSet): + """Custom filterset for the TransferOrderAllocationList endpoint.""" + + class Meta: + """Metaclass options.""" + + model = models.TransferOrderAllocation + fields = ['line', 'item'] + + order = rest_filters.ModelChoiceFilter( + queryset=models.TransferOrder.objects.all(), + field_name='line__order', + label=_('Order'), + ) + + include_variants = rest_filters.BooleanFilter( + label=_('Include Variants'), method='filter_include_variants' + ) + + def filter_include_variants(self, queryset, name, value): + """Filter by whether or not to include variants of the selected part. + + Note: + - This filter does nothing by itself, and requires the 'part' filter to be set. + - Refer to the 'filter_part' method for more information. + """ + return queryset + + part = rest_filters.ModelChoiceFilter( + queryset=Part.objects.all(), method='filter_part', label=_('Part') + ) + + @extend_schema_field(rest_framework.serializers.IntegerField(help_text=_('Part'))) + def filter_part(self, queryset, name, part): + """Filter by the 'part' attribute. + + Note: + - If "include_variants" is True, include all variants of the selected part + - Otherwise, just filter by the selected part + """ + include_variants = str2bool(self.data.get('include_variants', False)) + + if include_variants: + parts = part.get_descendants(include_self=True) + return queryset.filter(item__part__in=parts) + else: + return queryset.filter(item__part=part) + + outstanding = rest_filters.BooleanFilter( + label=_('Outstanding'), method='filter_outstanding' + ) + + def filter_outstanding(self, queryset, name, value): + """Filter by "outstanding" status (boolean).""" + if str2bool(value): + return queryset.filter( + line__order__status__in=TransferOrderStatusGroups.OPEN + # TODO: is there an additional filter here if we aren't using a "shipment" + # shipment__shipment_date=None, + ) + return queryset.exclude( + # TODO: is there an additional filter here if we aren't using a "shipment" + # shipment__shipment_date=None, + line__order__status__in=TransferOrderStatusGroups.OPEN + ) + + location = rest_filters.ModelChoiceFilter( + queryset=stock_models.StockLocation.objects.all(), + label=_('Location'), + method='filter_location', + ) + + @extend_schema_field( + rest_framework.serializers.IntegerField(help_text=_('Location')) + ) + def filter_location(self, queryset, name, location): + """Filter by the location of the allocated StockItem.""" + locations = location.get_descendants(include_self=True) + return queryset.filter(item__location__in=locations) + + +class TransferOrderAllocationMixin: + """Mixin class for TransferOrderAllocation endpoints.""" + + queryset = models.TransferOrderAllocation.objects.all() + serializer_class = serializers.TransferOrderAllocationSerializer + + def get_queryset(self, *args, **kwargs): + """Annotate the queryset for this endpoint.""" + queryset = super().get_queryset(*args, **kwargs) + + queryset = queryset.prefetch_related( + 'item', + 'item__sales_order', + 'item__part', + 'line__part', + 'item__location', + 'line__order', + 'line__order__responsible', + 'line__order__project_code', + 'line__order__project_code__responsible', + ).select_related('line__part__pricing_data', 'item__part__pricing_data') + + return queryset + + +class TransferOrderAllocationOutputOptions(OutputConfiguration): + """Output options for the TransferOrderAllocation endpoint.""" + + OPTIONS = [ + InvenTreeOutputOption('part_detail'), + InvenTreeOutputOption('item_detail'), + InvenTreeOutputOption('order_detail'), + InvenTreeOutputOption('location_detail'), + ] + + +class TransferOrderAllocationList( + TransferOrderAllocationMixin, BulkUpdateMixin, OutputOptionsMixin, ListAPI +): + """API endpoint for listing TransferOrderAllocation objects.""" + + filterset_class = TransferOrderAllocationFilter + filter_backends = SEARCH_ORDER_FILTER + output_options = TransferOrderAllocationOutputOptions + + ordering_fields = [ + 'quantity', + 'part', + 'serial', + 'IPN', + 'batch', + 'location', + 'order', + ] + + ordering_field_aliases = { + 'IPN': 'item__part__IPN', + 'part': 'item__part__name', + 'serial': ['item__serial_int', 'item__serial'], + 'batch': 'item__batch', + 'location': 'item__location__name', + 'order': 'line__order__reference', + } + + search_fields = { + 'item__part__name', + 'item__part__IPN', + 'item__serial', + 'item__batch', + } + + +class TransferOrderAllocationDetail( + TransferOrderAllocationMixin, RetrieveUpdateDestroyAPI +): + """API endpoint for detail view of a TransferOrderAllocation object.""" + + +class TransferOrderLineItemFilter(LineItemFilter): + """Custom filters for TransferOrderLineItemList endpoint.""" + + class Meta: + """Metaclass options.""" + + model = models.TransferOrderLineItem + fields = [] + + order = rest_filters.ModelChoiceFilter( + queryset=models.TransferOrder.objects.all(), + field_name='order', + label=_('Order'), + ) + + def filter_include_variants(self, queryset, name, value): + """Filter by whether or not to include variants of the selected part. + + Note: + - This filter does nothing by itself, and requires the 'part' filter to be set. + - Refer to the 'filter_part' method for more information. + """ + return queryset + + part = rest_filters.ModelChoiceFilter( + queryset=Part.objects.all(), + field_name='part', + label=_('Part'), + method='filter_part', + ) + + @extend_schema_field(OpenApiTypes.INT) + def filter_part(self, queryset, name, part): + """Filter TransferOrderLineItem by selected 'part'. + + Note: + - If 'include_variants' is set to True, then all variants of the selected part will be included. + - Otherwise, just filter by the selected part. + """ + include_variants = str2bool(self.data.get('include_variants', False)) + + # Construct a queryset of parts to filter by + if include_variants: + parts = part.get_descendants(include_self=True) + else: + parts = Part.objects.filter(pk=part.pk) + + return queryset.filter(part__in=parts) + + allocated = rest_filters.BooleanFilter( + label=_('Allocated'), method='filter_allocated' + ) + + def filter_allocated(self, queryset, name, value): + """Filter by lines which are 'allocated'. + + A line is 'allocated' when allocated >= quantity + """ + q = Q(allocated__gte=F('quantity')) + + if str2bool(value): + return queryset.filter(q) + return queryset.exclude(q) + + completed = rest_filters.BooleanFilter( + label=_('Completed'), method='filter_completed' + ) + + def filter_completed(self, queryset, name, value): + """Filter by lines which are "completed". + + A line is 'completed' when transferred >= quantity + """ + q = Q(transferred__gte=F('quantity')) + + if str2bool(value): + return queryset.filter(q) + return queryset.exclude(q) + + order_complete = rest_filters.BooleanFilter( + label=_('Order Complete'), method='filter_order_complete' + ) + + def filter_order_complete(self, queryset, name, value): + """Filter by whether the order is 'complete' or not.""" + if str2bool(value): + return queryset.filter(order__status__in=TransferOrderStatusGroups.COMPLETE) + + return queryset.exclude(order__status__in=TransferOrderStatusGroups.COMPLETE) + + order_outstanding = rest_filters.BooleanFilter( + label=_('Order Outstanding'), method='filter_order_outstanding' + ) + + def filter_order_outstanding(self, queryset, name, value): + """Filter by whether the order is 'outstanding' or not.""" + if str2bool(value): + return queryset.filter(order__status__in=TransferOrderStatusGroups.OPEN) + + return queryset.exclude(order__status__in=TransferOrderStatusGroups.OPEN) + + +class TransferOrderLineItemMixin(SerializerContextMixin): + """Mixin class for TransferOrderLineItem endpoints.""" + + queryset = models.TransferOrderLineItem.objects.all() + serializer_class = serializers.TransferOrderLineItemSerializer + + def get_queryset(self, *args, **kwargs): + """Return annotated queryset for this endpoint.""" + queryset = super().get_queryset(*args, **kwargs) + + queryset = queryset.prefetch_related( + 'part', + 'allocations', + # 'allocations__transfer', + 'allocations__item__part', + 'allocations__item__location', + 'order', + ) + + queryset = serializers.TransferOrderLineItemSerializer.annotate_queryset( + queryset + ) + + return queryset + + +class TransferOrderLineItemOutputOptions(OutputConfiguration): + """Output options for the TransferOrderAllocation endpoint.""" + + OPTIONS = [ + InvenTreeOutputOption('part_detail'), + InvenTreeOutputOption('order_detail'), + ] + + +class TransferOrderLineItemList( + TransferOrderLineItemMixin, DataExportViewMixin, OutputOptionsMixin, ListCreateAPI +): + """API endpoint for accessing a list of TransferOrderLineItem objects.""" + + filterset_class = TransferOrderLineItemFilter + + filter_backends = SEARCH_ORDER_FILTER + + output_options = TransferOrderLineItemOutputOptions + + ordering_fields = [ + 'order', + 'part', + 'part__name', + 'quantity', + 'allocated', + 'transferred', + 'reference', + 'target_date', + ] + + ordering_field_aliases = {'part': 'part__name', 'order': 'order__reference'} + + search_fields = ['part__name', 'quantity', 'reference'] + + +class TransferOrderLineItemDetail( + TransferOrderLineItemMixin, OutputOptionsMixin, RetrieveUpdateDestroyAPI +): + """API endpoint for detail view of a TransferOrderLineItem object.""" + + output_options = TransferOrderLineItemOutputOptions + + class OrderCalendarExport(ICalFeed): """Calendar export for Purchase/Sales Orders. @@ -1842,6 +2361,8 @@ class OrderCalendarExport(ICalFeed): ordertype_title = _('Sales Order') elif obj['ordertype'] == 'return-order': ordertype_title = _('Return Order') + elif obj['ordertype'] == 'transfer-order': + ordertype_title = _('Transfer Order') else: ordertype_title = _('Unknown') @@ -1887,6 +2408,15 @@ class OrderCalendarExport(ICalFeed): ).filter(status__lt=ReturnOrderStatus.COMPLETE.value) else: outlist = models.ReturnOrder.objects.filter(target_date__isnull=False) + elif obj['ordertype'] == 'transfer-order': + if obj['include_completed'] is False: + # Do not include completed orders from list in this case + # Complete status = 30 + outlist = models.TransferOrder.objects.filter( + target_date__isnull=False + ).filter(status__lt=TransferOrderStatus.COMPLETE.value) + else: + outlist = models.TransferOrder.objects.filter(target_date__isnull=False) else: outlist = [] @@ -1898,7 +2428,12 @@ class OrderCalendarExport(ICalFeed): def item_description(self, item): """Set the event description.""" - return f'Company: {item.company.name}\nStatus: {item.get_status_display()}\nDescription: {item.description}' + if hasattr(item, 'company') and item.company: + return f'Company: {item.company.name}\nStatus: {item.get_status_display()}\nDescription: {item.description}' + else: + return ( + f'Status: {item.get_status_display()}\nDescription: {item.description}' + ) def item_start_datetime(self, item): """Set event start to target date. Goal is all-day event.""" @@ -2214,9 +2749,97 @@ order_api_urls = [ ), ]), ), + # API endpoints for transfer orders + path( + 'transfer-order/', + include([ + # Transfer Order detail endpoints + path( + '/', + include([ + path( + 'allocate/', + TransferOrderAllocate.as_view(), + name='api-transfer-order-allocate', + ), + path( + 'allocate-serials/', + TransferOrderAllocateSerials.as_view(), + name='api-transfer-order-allocate-serials', + ), + path( + 'cancel/', + TransferOrderCancel.as_view(), + name='api-transfer-order-cancel', + ), + path( + 'hold/', + TransferOrderHold.as_view(), + name='api-transfer-order-hold', + ), + path( + 'complete/', + TransferOrderComplete.as_view(), + name='api-transfer-order-complete', + ), + path( + 'issue/', + TransferOrderIssue.as_view(), + name='api-transfer-order-issue', + ), + meta_path(models.TransferOrder), + path( + '', + TransferOrderDetail.as_view(), + name='api-transfer-order-detail', + ), + ]), + ), + # Transfer Order list + path('', TransferOrderList.as_view(), name='api-transfer-order-list'), + ]), + ), + # API endpoints for transfer order line items + path( + 'transfer-order-line/', + include([ + path( + '/', + include([ + meta_path(models.TransferOrderLineItem), + path( + '', + TransferOrderLineItemDetail.as_view(), + name='api-transfer-order-line-detail', + ), + ]), + ), + path( + '', + TransferOrderLineItemList.as_view(), + name='api-transfer-order-line-list', + ), + ]), + ), + # API endpoints for sales order allocations + path( + 'transfer-order-allocation/', + include([ + path( + '/', + TransferOrderAllocationDetail.as_view(), + name='api-transfer-order-allocation-detail', + ), + path( + '', + TransferOrderAllocationList.as_view(), + name='api-transfer-order-allocation-list', + ), + ]), + ), # API endpoint for subscribing to ICS calendar of purchase/sales/return orders re_path( - r'^calendar/(?Ppurchase-order|sales-order|return-order)/calendar.ics', + r'^calendar/(?Ppurchase-order|sales-order|return-order|transfer-order)/calendar.ics', OrderCalendarExport(), name='api-po-so-calendar', ), diff --git a/src/backend/InvenTree/order/events.py b/src/backend/InvenTree/order/events.py index 0d67a3e11b..4f17e26e35 100644 --- a/src/backend/InvenTree/order/events.py +++ b/src/backend/InvenTree/order/events.py @@ -37,3 +37,12 @@ class ReturnOrderEvents(BaseEventEnum): COMPLETED = 'returnorder.completed' CANCELLED = 'returnorder.cancelled' HOLD = 'returnorder.hold' + + +class TransferOrderEvents(BaseEventEnum): + """Event enumeration for the PurchaseOrder models.""" + + ISSUED = 'transferorder.placed' + COMPLETED = 'transferorder.completed' + CANCELLED = 'transferorder.cancelled' + HOLD = 'transferorder.hold' diff --git a/src/backend/InvenTree/order/fixtures/transfer_order.yaml b/src/backend/InvenTree/order/fixtures/transfer_order.yaml new file mode 100644 index 0000000000..e4293d0f9a --- /dev/null +++ b/src/backend/InvenTree/order/fixtures/transfer_order.yaml @@ -0,0 +1,68 @@ +- model: order.transferorder + pk: 1 + fields: + reference: 'TO-123' + description: "One transfer order, please" + status: 10 # Pending + +- model: order.transferorder + pk: 2 + fields: + reference: 'TO-124' + description: "One transfer order, please" + status: 40 # Cancelled + +- model: order.transferorder + pk: 3 + fields: + reference: 'TO-125' + description: "One transfer order, please" + status: 25 # On Hold + +- model: order.transferorder + pk: 4 + fields: + reference: 'TO-126' + description: "One transfer order, please" + status: 20 # Issued + +- model: order.transferorder + pk: 5 + fields: + reference: 'TO-127' + description: "One transfer order, please" + status: 30 # Complete + + +# Line items for transfer orders +- model: order.transferorderlineitem + pk: 1 + fields: + order: 5 # the completed order + part: 10001 # blue chair + quantity: 1 + +- model: order.transferorderlineitem + pk: 2 + fields: + order: 4 # the issued order + part: 10001 # blue chair + quantity: 1 + transferred: 1 + +# Allocations for transfer orders +# an 'allocated' allocation +- model: order.transferorderallocation + pk: 1 + fields: + line: 1 # the line item on the completed order + item: 1 # stock item + quantity: 1 + +# a 'complete' allocation +- model: order.transferorderallocation + pk: 2 + fields: + line: 2 # the line item on the issued order + item: 500 # stock item for the blue chair + quantity: 1 diff --git a/src/backend/InvenTree/order/migrations/0117_purchaseorderextraline_line_int_and_more.py b/src/backend/InvenTree/order/migrations/0117_purchaseorderextraline_line_int_and_more.py new file mode 100644 index 0000000000..5d166331fb --- /dev/null +++ b/src/backend/InvenTree/order/migrations/0117_purchaseorderextraline_line_int_and_more.py @@ -0,0 +1,74 @@ +# Generated by Django 5.2.13 on 2026-05-07 04:10 + +from django.db import migrations, models + + +def add_integer_line_number(apps, schema_editor): + """Add integer line numbers to existing line items.""" + + for model in [ + apps.get_model('order', 'PurchaseOrderLineItem'), + apps.get_model('order', 'ReturnOrderLineItem'), + apps.get_model('order', 'SalesOrderLineItem'), + apps.get_model('order', 'PurchaseOrderExtraLine'), + apps.get_model('order', 'ReturnOrderExtraLine'), + apps.get_model('order', 'SalesOrderExtraLine'), + ]: + items = [] + + for item in model.objects.exclude(line__isnull=True).exclude(line=''): + # Attempt to convert the existing line number to an integer + try: + item.line_int = int(item.line) + items.append(item) + except (ValueError, TypeError): + pass + + if len(items) > 0: + print(f"- Updating {len(items)} line items for model {model._meta.model_name}") + model.objects.bulk_update(items, ['line_int'], batch_size=250) + + + +class Migration(migrations.Migration): + + dependencies = [ + ("order", "0116_purchaseorderextraline_line_and_more"), + ] + + operations = [ + migrations.AddField( + model_name="purchaseorderextraline", + name="line_int", + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name="purchaseorderlineitem", + name="line_int", + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name="returnorderextraline", + name="line_int", + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name="returnorderlineitem", + name="line_int", + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name="salesorderextraline", + name="line_int", + field=models.IntegerField(default=0), + ), + migrations.AddField( + model_name="salesorderlineitem", + name="line_int", + field=models.IntegerField(default=0), + ), + migrations.RunPython( + code=add_integer_line_number, + reverse_code=migrations.RunPython.noop, + ), + ] diff --git a/src/backend/InvenTree/order/migrations/0118_transferorder.py b/src/backend/InvenTree/order/migrations/0118_transferorder.py new file mode 100644 index 0000000000..ddaf02c8c6 --- /dev/null +++ b/src/backend/InvenTree/order/migrations/0118_transferorder.py @@ -0,0 +1,482 @@ +# Generated by Django 5.2.11 on 2026-02-27 22:00 + +import InvenTree.fields +import InvenTree.models +import django.core.validators +import django.db.models.deletion +import generic.states.fields +import generic.states.states +import generic.states.transition +import generic.states.validators +import order.status_codes +import order.validators +from django.conf import settings +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("common", "0041_auto_20251203_1244"), + ("company", "0077_delete_manufacturerpartparameter"), + ("order", "0117_purchaseorderextraline_line_int_and_more"), + ("part", "0146_auto_20251203_1241"), + ("stock", "0116_alter_stockitem_link"), + ("users", "0005_owner_model"), + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="TransferOrder", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "metadata", + models.JSONField( + blank=True, + help_text="JSON metadata field, for use by external plugins", + null=True, + verbose_name="Plugin Metadata", + ), + ), + ("reference_int", models.BigIntegerField(default=0)), + ( + "notes", + InvenTree.fields.InvenTreeNotesField( + blank=True, + help_text="Markdown notes (optional)", + max_length=50000, + null=True, + verbose_name="Notes", + ), + ), + ( + "barcode_data", + models.CharField( + blank=True, + help_text="Third party barcode data", + max_length=500, + verbose_name="Barcode Data", + ), + ), + ( + "barcode_hash", + models.CharField( + blank=True, + help_text="Unique hash of barcode data", + max_length=128, + verbose_name="Barcode Hash", + ), + ), + ( + "description", + models.CharField( + blank=True, + help_text="Order description (optional)", + max_length=250, + verbose_name="Description", + ), + ), + ( + "link", + InvenTree.fields.InvenTreeURLField( + blank=True, + help_text="Link to external page", + max_length=2000, + verbose_name="Link", + ), + ), + ( + "start_date", + models.DateField( + blank=True, + help_text="Scheduled start date for this order", + null=True, + verbose_name="Start date", + ), + ), + ( + "target_date", + models.DateField( + blank=True, + help_text="Expected date for order delivery. Order will be overdue after this date.", + null=True, + verbose_name="Target Date", + ), + ), + ( + "creation_date", + models.DateField( + blank=True, null=True, verbose_name="Creation Date" + ), + ), + ( + "issue_date", + models.DateField( + blank=True, + help_text="Date order was issued", + null=True, + verbose_name="Issue Date", + ), + ), + ( + "reference", + models.CharField( + default=order.validators.generate_next_transfer_order_reference, + help_text="Transfer Order Reference", + max_length=64, + unique=True, + validators=[order.validators.validate_transfer_order_reference], + verbose_name="Reference", + ), + ), + ( + "consume", + models.BooleanField( + default=False, + help_text='Rather than transfer the stock to the destination, "consume" it, by removing transferred quantity from the allocated stock item', + verbose_name="Consume Stock", + ), + ), + ( + "complete_date", + models.DateField( + blank=True, + help_text="Date order was completed", + null=True, + verbose_name="Completion Date", + ), + ), + ( + "status_custom_key", + generic.states.fields.ExtraInvenTreeCustomStatusModelField( + blank=True, + default=None, + help_text="Additional status information for this item", + null=True, + validators=[ + generic.states.validators.CustomStatusCodeValidator( + status_class=order.status_codes.TransferOrderStatus + ) + ], + verbose_name="Custom status key", + ), + ), + ( + "status", + generic.states.fields.InvenTreeCustomStatusModelField( + choices=[ + (10, "Pending"), + (20, "Issued"), + (25, "On Hold"), + (30, "Complete"), + (40, "Cancelled"), + ], + default=10, + help_text="Transfer order status", + validators=[ + generic.states.validators.CustomStatusCodeValidator( + status_class=order.status_codes.TransferOrderStatus + ) + ], + verbose_name="Status", + ), + ), + ( + "address", + models.ForeignKey( + blank=True, + help_text="Company address for this order", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="company.address", + verbose_name="Address", + ), + ), + ( + "contact", + models.ForeignKey( + blank=True, + help_text="Point of contact for this order", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="company.contact", + verbose_name="Contact", + ), + ), + ( + "created_by", + models.ForeignKey( + blank=True, + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to=settings.AUTH_USER_MODEL, + verbose_name="Created By", + ), + ), + ( + "destination", + models.ForeignKey( + blank=True, + help_text="Destination for transferred items", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="incoming_transfers", + to="stock.stocklocation", + verbose_name="Destination Location", + ), + ), + ( + "project_code", + models.ForeignKey( + blank=True, + help_text="Select project code for this order", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="common.projectcode", + verbose_name="Project Code", + ), + ), + ( + "responsible", + models.ForeignKey( + blank=True, + help_text="User or group responsible for this order", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="+", + to="users.owner", + verbose_name="Responsible", + ), + ), + ( + "take_from", + models.ForeignKey( + blank=True, + help_text="Source for transferred items", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="sourcing_transfers", + to="stock.stocklocation", + verbose_name="Source Location", + ), + ), + ( + "updated_at", + models.DateTimeField( + blank=True, + help_text="Timestamp of last update", + null=True, + verbose_name="Updated At", + ), + ) + ], + options={ + "verbose_name": "Transfer Order", + }, + bases=( + generic.states.states.StatusCodeMixin, + generic.states.transition.StateTransitionMixin, + InvenTree.models.InvenTreeAttachmentMixin, + InvenTree.models.InvenTreePermissionCheckMixin, + InvenTree.models.ContentTypeMixin, + InvenTree.models.PluginValidationMixin, + models.Model, + ), + ), + migrations.CreateModel( + name="TransferOrderLineItem", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "metadata", + models.JSONField( + blank=True, + help_text="JSON metadata field, for use by external plugins", + null=True, + verbose_name="Plugin Metadata", + ), + ), + ( + "quantity", + InvenTree.fields.RoundingDecimalField( + decimal_places=5, + default=1, + help_text="Item quantity", + max_digits=15, + validators=[django.core.validators.MinValueValidator(0)], + verbose_name="Quantity", + ), + ), + ( + "reference", + models.CharField( + blank=True, + help_text="Line item reference", + max_length=100, + verbose_name="Reference", + ), + ), + ( + "notes", + models.CharField( + blank=True, + help_text="Line item notes", + max_length=500, + verbose_name="Notes", + ), + ), + ( + "link", + InvenTree.fields.InvenTreeURLField( + blank=True, + help_text="Link to external page", + max_length=2000, + verbose_name="Link", + ), + ), + ( + "target_date", + models.DateField( + blank=True, + help_text="Target date for this line item (leave blank to use the target date from the order)", + null=True, + verbose_name="Target Date", + ), + ), + ( + "order", + models.ForeignKey( + help_text="Transfer Order", + on_delete=django.db.models.deletion.CASCADE, + related_name="lines", + to="order.transferorder", + verbose_name="Order", + ), + ), + ( + "part", + models.ForeignKey( + help_text="Part", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + related_name="transfer_order_line_items", + to="part.part", + verbose_name="Part", + ), + ), + ( + "project_code", + models.ForeignKey( + blank=True, + help_text="Select project code for this order", + null=True, + on_delete=django.db.models.deletion.SET_NULL, + to="common.projectcode", + verbose_name="Project Code", + ), + ), + ( + "transferred", + InvenTree.fields.RoundingDecimalField( + decimal_places=5, + default=0, + help_text="transferred quantity", + max_digits=15, + validators=[django.core.validators.MinValueValidator(0)], + verbose_name="transferred", + ), + ), + ( + "line", + models.CharField( + blank=True, + default="", + help_text="Line number for this item (optional)", + max_length=20, + verbose_name="Line Number", + ), + ) + ], + options={ + "verbose_name": "Transfer Order Line Item", + }, + bases=( + InvenTree.models.ContentTypeMixin, + InvenTree.models.PluginValidationMixin, + models.Model, + ), + ), + migrations.CreateModel( + name="TransferOrderAllocation", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ( + "quantity", + InvenTree.fields.RoundingDecimalField( + decimal_places=5, + default=1, + help_text="Enter stock allocation quantity", + max_digits=15, + validators=[django.core.validators.MinValueValidator(0)], + verbose_name="Quantity", + ), + ), + ( + "item", + models.ForeignKey( + help_text="Select stock item to allocate", + limit_choices_to={ + "belongs_to": None, + "part__virtual": False, + "sales_order": None, + }, + on_delete=django.db.models.deletion.CASCADE, + related_name="transfer_order_allocations", + to="stock.stockitem", + verbose_name="Item", + ), + ), + ( + "line", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="allocations", + to="order.transferorderlineitem", + verbose_name="Line", + ), + ), + ], + options={ + "verbose_name": "Transfer Order Allocation", + }, + ), + ] diff --git a/src/backend/InvenTree/order/migrations/0119_transferorderlineitem_line_int.py b/src/backend/InvenTree/order/migrations/0119_transferorderlineitem_line_int.py new file mode 100644 index 0000000000..e9ad06975c --- /dev/null +++ b/src/backend/InvenTree/order/migrations/0119_transferorderlineitem_line_int.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2.13 on 2026-05-11 21:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("order", "0118_transferorder"), + ] + + operations = [ + migrations.AddField( + model_name="transferorderlineitem", + name="line_int", + field=models.IntegerField(default=0), + ), + ] diff --git a/src/backend/InvenTree/order/models.py b/src/backend/InvenTree/order/models.py index 58a67ef1f3..5973f4292b 100644 --- a/src/backend/InvenTree/order/models.py +++ b/src/backend/InvenTree/order/models.py @@ -45,7 +45,12 @@ from InvenTree.fields import ( ) from InvenTree.helpers import decimal2string, pui_url from InvenTree.helpers_model import notify_responsible -from order.events import PurchaseOrderEvents, ReturnOrderEvents, SalesOrderEvents +from order.events import ( + PurchaseOrderEvents, + ReturnOrderEvents, + SalesOrderEvents, + TransferOrderEvents, +) from order.status_codes import ( PurchaseOrderStatus, PurchaseOrderStatusGroups, @@ -54,6 +59,8 @@ from order.status_codes import ( ReturnOrderStatusGroups, SalesOrderStatus, SalesOrderStatusGroups, + TransferOrderStatus, + TransferOrderStatusGroups, ) from part import models as PartModels from plugin.events import trigger_event @@ -265,6 +272,27 @@ class ReturnOrderReportContext(report.mixins.BaseReportContext, TypedDict): customer: Optional[Company] +class TransferOrderReportContext(report.mixins.BaseReportContext, TypedDict): + """Context for the transfer order model. + + Attributes: + description: The description field of the TransferOrder + reference: The reference field of the TransferOrder + title: The title (string representation) of the TransferOrder + lines: Query set of all line items associated with the TransferOrder + order: The TransferOrder instance itself + """ + + description: str + reference: str + title: str + lines: report.mixins.QuerySet['TransferOrderLineItem'] + order: 'TransferOrder' + take_from: 'stock.models.StockLocation' + destination: 'stock.models.StockLocation' + consume: bool + + class Order( StatusCodeMixin, StateTransitionMixin, @@ -374,11 +402,16 @@ class Order( }) # Check that the referenced 'contact' matches the correct 'company' - if self.company and self.contact: - if self.contact.company != self.company: - raise ValidationError({ - 'contact': _('Contact does not match selected company') - }) + if ( + hasattr(self, 'company') + and hasattr(self, 'contact') + and self.company + and self.contact + and (self.contact.company != self.company) + ): + raise ValidationError({ + 'contact': _('Contact does not match selected company') + }) # Target date should be *after* the start date if self.start_date and self.target_date and self.start_date > self.target_date: @@ -388,11 +421,15 @@ class Order( }) # Check that the referenced 'address' matches the correct 'company' - if self.company and self.address: - if self.address.company != self.company: - raise ValidationError({ - 'address': _('Address does not match selected company') - }) + if ( + hasattr(self, 'company') + and self.company + and self.address + and (self.address.company != self.company) + ): + raise ValidationError({ + 'address': _('Address does not match selected company') + }) def clean_line_item(self, line): """Clean a line item for this order. @@ -408,7 +445,9 @@ class Order( """Generate context data for the reporting interface.""" return { 'description': self.description, - 'extra_lines': self.extra_lines, + 'extra_lines': getattr( + self, 'extra_lines', None + ), # Transfer Order doesn't have extra lines 'lines': self.lines, 'order': self, 'reference': self.reference, @@ -1173,7 +1212,9 @@ class PurchaseOrder(TotalPriceMixin, Order): # Bulk create new stock items if len(bulk_create_items) > 0: - stock.models.StockItem.objects.bulk_create(bulk_create_items) + stock.models.StockItem.objects.bulk_create( + bulk_create_items, batch_size=250 + ) # Fetch them back again tree_ids = [item.tree_id for item in bulk_create_items] @@ -1200,7 +1241,9 @@ class PurchaseOrder(TotalPriceMixin, Order): ) # Bulk create new tracking entries for each item - stock.models.StockItemTracking.objects.bulk_create(tracking_entries) + stock.models.StockItemTracking.objects.bulk_create( + tracking_entries, batch_size=250 + ) # Update received quantity for each line item PurchaseOrderLineItem.objects.bulk_update(line_items_to_update, ['received']) @@ -1751,6 +1794,8 @@ class OrderLineItem(InvenTree.models.InvenTreeMetadataModel): Attributes: quantity: Number of items + line: The line number for this item (optional) + line_int: An integer line number for this item (optional - used for natural sorting) reference: Reference text (e.g. customer reference) for this line item project_code: Project code associated with this line item (optional) note: Annotation for the item @@ -1774,6 +1819,15 @@ class OrderLineItem(InvenTree.models.InvenTreeMetadataModel): update_order = kwargs.pop('update_order', True) + # Update the integer representation of the line number (for natural sorting) + if self.line: + try: + self.line_int = int(self.line) + except (TypeError, ValueError): + self.line_int = 0 + else: + self.line_int = 0 + super().save(*args, **kwargs) if update_order and self.order: self.order.save() @@ -1815,6 +1869,8 @@ class OrderLineItem(InvenTree.models.InvenTreeMetadataModel): help_text=_('Line number for this item (optional)'), ) + line_int = models.IntegerField(default=0, blank=False, null=False) + reference = models.CharField( max_length=100, blank=True, @@ -1938,13 +1994,16 @@ class PurchaseOrderLineItem(OrderLineItem): if self.part.supplier != self.order.supplier: raise ValidationError({'part': _('Supplier part must match supplier')}) + # Link to the base part + part = self.part.part + if self.build_order: if not self.build_order.external: raise ValidationError({ 'build_order': _('Build order must be marked as external') }) - if part := self.part.part: + if part: if not part.assembly: raise ValidationError({ 'build_order': _( @@ -1957,6 +2016,17 @@ class PurchaseOrderLineItem(OrderLineItem): 'build_order': _('Build order part must match line item part') }) + # Extra checks for external builds + if part and part.assembly and get_global_setting('BUILDORDER_EXTERNAL_BUILDS'): + if not self.build_order and get_global_setting( + 'BUILDORDER_EXTERNAL_REQUIRED' + ): + raise ValidationError({ + 'build_order': _( + 'An external build order is required for assembly parts' + ) + }) + def __str__(self): """Render a string representation of a PurchaseOrderLineItem instance.""" return '{n} x {part} - {po}'.format( @@ -3124,6 +3194,628 @@ class ReturnOrderExtraLine(OrderExtraLine): ) +class TransferOrder(Order): + """A Transfer Order represents a request to transfer stock from one location to another. It provides a place to queue and review changes before execution. + + Attributes: + take_from: The stock location to source items from (or null to ) + destination: The stock location to move items to + consume: Rather than move the stock, "consume" it. Helpful if you want to queue up removing stock from inventory + """ + + # Global setting for specifying reference pattern + REFERENCE_PATTERN_SETTING = 'TRANSFERORDER_REFERENCE_PATTERN' + REQUIRE_RESPONSIBLE_SETTING = 'TRANSFERORDER_REQUIRE_RESPONSIBLE' + STATUS_CLASS = TransferOrderStatus + # UNLOCK_SETTING = 'TRANSFERORDER_EDIT_COMPLETED_ORDERS' + + class Meta: + """Model meta options.""" + + verbose_name = _('Transfer Order') + + def report_context(self) -> TransferOrderReportContext: + """Return report context data for this TransferOrder.""" + return { + **super().report_context(), + 'take_from': self.take_from, + 'destination': self.destination, + 'consume': self.consume, + } + + def get_absolute_url(self) -> str: + """Get the 'web' URL for this order.""" + return pui_url(f'/stock/transfer-order/{self.pk}') + + @staticmethod + def get_api_url() -> str: + """Return the API URL associated with the TransferOrder model.""" + return reverse('api-transfer-order-list') + + @classmethod + def get_status_class(cls): + """Return the TransferOrderStatus class.""" + return TransferOrderStatusGroups + + @classmethod + def api_defaults(cls, request=None): + """Return default values for this model when issuing an API OPTIONS request.""" + defaults = { + 'reference': order.validators.generate_next_transfer_order_reference() + } + + return defaults + + @classmethod + def barcode_model_type_code(cls): + """Return the associated barcode model type code for this model.""" + return 'TO' + + def subscribed_users(self) -> list[User]: + """Return a list of users subscribed to this TransferOrder. + + By this, we mean users to are interested in any of the parts associated with this order. + """ + subscribed_users = set() + + for line in self.lines.all(): + if line.part: + # Add the part to the list of subscribed users + for user in line.part.get_subscribers(): + subscribed_users.add(user) + + return list(subscribed_users) + + def clean_line_item(self, line): + """Clean a line item for this PurchaseOrder.""" + super().clean_line_item(line) + line.transferred = 0 + + def __str__(self): + """Render a string representation of this TransferOrder.""" + return f'{self.reference} - {self.take_from.name if self.take_from else _("deleted")} --> {self.destination.name if self.destination else _("deleted")}' + + reference = models.CharField( + unique=True, + max_length=64, + blank=False, + help_text=_('Transfer Order Reference'), + verbose_name=_('Reference'), + default=order.validators.generate_next_transfer_order_reference, + validators=[order.validators.validate_transfer_order_reference], + ) + + status = InvenTreeCustomStatusModelField( + default=TransferOrderStatus.PENDING.value, + choices=TransferOrderStatus.items(), + status_class=TransferOrderStatus, + verbose_name=_('Status'), + help_text=_('Transfer order status'), + ) + + @property + def status_text(self): + """Return the text representation of the status field.""" + return TransferOrderStatus.text(self.status) + + take_from = models.ForeignKey( + 'stock.StockLocation', + verbose_name=_('Source Location'), + on_delete=models.SET_NULL, + related_name='sourcing_transfers', + blank=True, + null=True, + help_text=_('Source for transferred items'), + ) + + destination = models.ForeignKey( + 'stock.StockLocation', + verbose_name=_('Destination Location'), + on_delete=models.SET_NULL, + related_name='incoming_transfers', + blank=True, + null=True, + help_text=_('Destination for transferred items'), + ) + + consume = models.BooleanField( + default=False, + verbose_name=_('Consume Stock'), + help_text=_( + 'Rather than transfer the stock to the destination, "consume" it, by removing transferred quantity from the allocated stock item' + ), + ) + + complete_date = models.DateField( + blank=True, + null=True, + verbose_name=_('Completion Date'), + help_text=_('Date order was completed'), + ) + + @property + def company(self) -> None: + """Required accessor helper for Order base class.""" + return None + + @property + def is_pending(self) -> bool: + """Return True if the TransferOrder is 'pending'.""" + return self.status == TransferOrderStatus.PENDING.value + + @property + def is_open(self) -> bool: + """Return True if the TransferOrder is 'open'.""" + return self.status in TransferOrderStatusGroups.OPEN + + @property + def stock_allocations(self) -> QuerySet: + """Return a queryset containing all allocations for this order.""" + return TransferOrderAllocation.objects.filter( + line__in=[line.pk for line in self.lines.all()] + ) + + def is_fully_allocated(self) -> bool: + """Return True if all line items are fully allocated.""" + return all(line.is_fully_allocated() for line in self.lines.all()) + + def is_overallocated(self) -> bool: + """Return true if any lines in the order are over-allocated.""" + return any(line.is_overallocated() for line in self.lines.all()) + + def is_completed(self) -> bool: + """Check if this order is "transferred" (all line items transferred).""" + return all(line.is_completed() for line in self.lines.all()) + + def can_complete( + self, raise_error: bool = False, allow_incomplete_lines: bool = False + ) -> bool: + """Test if this TransferOrder can be completed.""" + try: + if self.status == TransferOrderStatus.COMPLETE.value: + raise ValidationError(_('Order is already complete')) + + if self.status == TransferOrderStatus.CANCELLED.value: + raise ValidationError(_('Order is already cancelled')) + + if not self.consume and not self.destination: + raise ValidationError( + _('Order cannot be completed until a destination location is set') + ) + + if not (self.is_fully_allocated() or allow_incomplete_lines): + raise ValidationError( + _('Order cannot be completed until it is fully allocated') + ) + except ValidationError as e: + if raise_error: + raise e + else: + return False + + return True + + @property + def can_issue(self) -> bool: + """Return True if this order can be issued.""" + return self.status in [ + TransferOrderStatus.PENDING.value, + TransferOrderStatus.ON_HOLD.value, + ] + + @transaction.atomic + def issue_order(self): + """Attempt to transition to PLACED status.""" + return self.handle_transition( + self.status, TransferOrderStatus.ISSUED.value, self, self._action_issue + ) + + # region state changes + def _action_issue(self, *args, **kwargs): + """Marks the TransferOrder as ISSUED. + + Order must be currently PENDING. + """ + if self.can_issue: + self.status = TransferOrderStatus.ISSUED.value + self.issue_date = InvenTree.helpers.current_date() + self.save() + + trigger_event(TransferOrderEvents.ISSUED, id=self.pk) + + # Notify users that the order has been issued + notify_responsible( + self, + TransferOrder, + exclude=self.created_by, + content=InvenTreeNotificationBodies.NewOrder, + extra_users=self.subscribed_users(), + ) + + @property + def can_hold(self) -> bool: + """Return True if this order can be placed on hold.""" + return self.status in [ + TransferOrderStatus.PENDING.value, + TransferOrderStatus.ISSUED.value, + ] + + def _action_hold(self, *args, **kwargs): + """Mark this transfer order as 'on hold'.""" + if self.can_hold: + self.status = TransferOrderStatus.ON_HOLD.value + self.save() + + trigger_event(TransferOrderEvents.HOLD, id=self.pk) + + @transaction.atomic + def _action_complete(self, *args, **kwargs): + """Marks the TransferOrder as COMPLETE. + + Order must be currently ISSUED. + """ + user = kwargs.pop('user', None) + + if not self.can_complete(raise_error=True, **kwargs): + return False + + if self.status == TransferOrderStatus.ISSUED: + for allocation in self.allocations(): + # execute each transfer + allocation.complete_allocation(user) + + self.status = TransferOrderStatus.COMPLETE.value + self.complete_date = InvenTree.helpers.current_date() + + self.save() + + trigger_event(TransferOrderEvents.COMPLETED, id=self.pk) + + return True + + @transaction.atomic + def complete_order(self, user, **kwargs): + """Attempt to transition to COMPLETE status.""" + return self.handle_transition( + self.status, + TransferOrderStatus.COMPLETE.value, + self, + self._action_complete, + user=user, + **kwargs, + ) + + @transaction.atomic + def hold_order(self): + """Attempt to transition to ON_HOLD status.""" + return self.handle_transition( + self.status, TransferOrderStatus.ON_HOLD.value, self, self._action_hold + ) + + @transaction.atomic + def cancel_order(self): + """Attempt to transition to CANCELLED status.""" + return self.handle_transition( + self.status, TransferOrderStatus.CANCELLED.value, self, self._action_cancel + ) + + @property + def can_cancel(self) -> bool: + """A TransferOrder can only be cancelled under the following circumstances. + + - Status is ISSUED + - Status is PENDING (or ON_HOLD) + """ + return self.status in TransferOrderStatusGroups.OPEN + + def _action_cancel(self, *args, **kwargs): + """Cancel this TransferOrder (only if we're allowed to). + + Executes: + - Mark the order as 'cancelled' + - Delete any StockItems which have been allocated + """ + if not self.can_cancel: + return False + + self.status = TransferOrderStatus.CANCELLED.value + self.save() + + # delete allocations + for line in self.lines.all(): + for allocation in line.allocations.all(): + allocation.delete() + + trigger_event(TransferOrderEvents.CANCELLED, id=self.pk) + + # Notify users that the order has been canceled + notify_responsible( + self, + TransferOrder, + exclude=self.created_by, + content=InvenTreeNotificationBodies.OrderCanceled, + extra_users=self.subscribed_users(), + ) + + # endregion + + @property + def line_count(self) -> int: + """Return the total number of lines associated with this order.""" + return self.lines.count() + + def completed_line_items(self) -> QuerySet: + """Return a queryset of the completed line items for this order.""" + return self.lines.filter(transferred__gte=F('quantity')) + + def pending_line_items(self) -> QuerySet: + """Return a queryset of the pending line items for this order.""" + return self.lines.filter(transferred__lt=F('quantity')) + + @property + def completed_line_count(self) -> int: + """Return the number of completed lines for this order.""" + return self.completed_line_items().count() + + @property + def pending_line_count(self) -> int: + """Return the number of pending (incomplete) lines associated with this order.""" + return self.pending_line_items().count() + + def allocations(self) -> QuerySet: + """Return a queryset of all allocations for this order.""" + return TransferOrderAllocation.objects.filter(line__order=self) + + +class TransferOrderLineItem(OrderLineItem): + """Model for a single LineItem in a TransferOrder. + + Attributes: + order: Link to the TransferOrder that this line item belongs to + part: Link to a Part object (may be null) + transferred: The number of items which have actually transferred against this line item + """ + + class Meta: + """Model meta options.""" + + verbose_name = _('Transfer Order Line Item') + + # Filter for determining if a particular TransferOrderLineItem is overdue + OVERDUE_FILTER = ( + Q(transferred__lt=F('quantity')) + & ~Q(target_date=None) + & Q(target_date__lt=InvenTree.helpers.current_date()) + ) + + @staticmethod + def get_api_url(): + """Return the API URL associated with the TransferOrderLineItem model.""" + return reverse('api-transfer-order-line-list') + + order = models.ForeignKey( + TransferOrder, + on_delete=models.CASCADE, + related_name='lines', + verbose_name=_('Order'), + help_text=_('Transfer Order'), + ) + + part = models.ForeignKey( + 'part.Part', + on_delete=models.SET_NULL, + related_name='transfer_order_line_items', + null=True, + verbose_name=_('Part'), + help_text=_('Part'), + # limit_choices_to={'salable': True}, + ) + + transferred = RoundingDecimalField( + verbose_name=_('transferred'), + help_text=_('transferred quantity'), + default=0, + max_digits=15, + decimal_places=5, + validators=[MinValueValidator(0)], + ) + + def allocated_quantity(self): + """Return the total stock quantity allocated to this LineItem. + + This is a summation of the quantity of each attached StockItem + """ + if not self.pk: + return 0 + + query = self.allocations.aggregate( + allocated=Coalesce(Sum('quantity'), Decimal(0)) + ) + + return query['allocated'] + + def is_fully_allocated(self) -> bool: + """Return True if this line item is fully allocated.""" + # If the linked part is "virtual", then we cannot allocate stock against it + if self.part and self.part.virtual: + return True + + return self.allocated_quantity() >= self.quantity + + def is_overallocated(self) -> bool: + """Return True if this line item is over allocated.""" + return self.allocated_quantity() > self.quantity + + def is_completed(self) -> bool: + """Return True if this line item is completed (has been fully shipped).""" + # A "virtual" part is always considered to be "completed" + if self.part and self.part.virtual: + return True + + return self.transferred >= self.quantity + + +class TransferOrderAllocation(models.Model): + """This model is used to 'allocate' stock items to a TransferOrder. Items that are "allocated" to a TransferOrder are not yet "attached" to the order, but they will be once the order is fulfilled. + + Attributes: + line: TransferOrderLineItem reference + item: StockItem reference + quantity: Quantity to take from the StockItem + """ + + class Meta: + """Model meta options.""" + + verbose_name = _('Transfer Order Allocation') + + @staticmethod + def get_api_url(): + """Return the API URL associated with the TransferOrderAllocation model.""" + return reverse('api-transfer-order-allocation-list') + + def clean(self): + """Validate the TransferOrderAllocation object. + + Executes: + - Cannot allocate stock to a line item without a part reference + - The referenced part must match the part associated with the line item + - Allocated quantity cannot exceed the quantity of the stock item + - Allocation quantity must be "1" if the StockItem is serialized + - Allocation quantity cannot be zero + """ + super().clean() + + errors = {} + + try: + if not self.item: + raise ValidationError({'item': _('Stock item has not been assigned')}) + except stock.models.StockItem.DoesNotExist: + raise ValidationError({'item': _('Stock item has not been assigned')}) + + try: + if self.line.part != self.item.part: + variants = self.line.part.get_descendants(include_self=True) + if self.line.part not in variants: + errors['item'] = _( + 'Cannot allocate stock item to a line with a different part' + ) + except PartModels.Part.DoesNotExist: + errors['line'] = _('Cannot allocate stock to a line without a part') + + if self.quantity > self.item.quantity: + errors['quantity'] = _('Allocation quantity cannot exceed stock quantity') + + # Ensure that we do not 'over allocate' a stock item + build_allocation_count = self.item.build_allocation_count() + sales_allocation_count = self.item.sales_order_allocation_count( + exclude_allocations={'pk': self.pk} + ) + + total_allocation = ( + build_allocation_count + sales_allocation_count + self.quantity + ) + + if total_allocation > self.item.quantity: + errors['quantity'] = _('Stock item is over-allocated') + + if self.quantity <= 0: + errors['quantity'] = _('Allocation quantity must be greater than zero') + + if self.item.serial and self.quantity != 1: + errors['quantity'] = _('Quantity must be 1 for serialized stock item') + + if len(errors) > 0: + raise ValidationError(errors) + + line = models.ForeignKey( + TransferOrderLineItem, + on_delete=models.CASCADE, + verbose_name=_('Line'), + related_name='allocations', + ) + + item = models.ForeignKey( + 'stock.StockItem', + on_delete=models.CASCADE, + related_name='transfer_order_allocations', + limit_choices_to={ + 'part__virtual': False, + 'belongs_to': None, + 'sales_order': None, + }, + verbose_name=_('Item'), + help_text=_('Select stock item to allocate'), + ) + + quantity = RoundingDecimalField( + max_digits=15, + decimal_places=5, + validators=[MinValueValidator(0)], + default=1, + verbose_name=_('Quantity'), + help_text=_('Enter stock allocation quantity'), + ) + + def get_location(self): + """Return the value of the location associated with this allocation.""" + return self.item.location.id if self.item.location else None + + def get_po(self): + """Return the PurchaseOrder associated with this allocation.""" + return self.item.purchase_order + + def complete_allocation(self, user): + """Complete this allocation (called when the parent TransferOrder is marked as "completed"). + + Executes: + - Determine if the referenced StockItem needs to be "split" (if allocated quantity != stock quantity) + - Move the StockItem to the new location + - Updates the transferred qty + - If order is marked as "consume", reduce quantity rather than move + """ + order: TransferOrder = self.line.order + self.item: stock.models.StockItem # for type hints + self.line: TransferOrderLineItem # for type hints + + # The allocation is the only thing linking this stock item to the transfer + # As a result, we must keep the allocation present even after completion + # This means allocations to transfer orders don't affect "available" stock + # (otherwise it would permanently reduce available stock) + + if order.consume: + # rather than transferring the stock, we simply reduce its quantity to release it from tracked inventory + # NOTE: if delete_on_deplete is enabled, this will result in the "transferred stock" panel being empty + # after completion. A more sophesticated immutable tracking that doesn't rely on allocations + # would be helpful here + self.item.take_stock( + quantity=self.quantity, + user=user, + code=StockHistoryCode.STOCK_REMOVE, + transferorder=order, + ) + else: + if self.quantity < self.item.quantity: + # update our own reference to the StockItem which was split + self.item = self.item.splitStock( + quantity=self.quantity, + location=order.destination, + user=user, + transferorder=order, + ) + self.save() + else: + # move item directly, we don't have to split + self.item.move( + location=order.destination, user=user, transferorder=order, notes='' + ) + + # Update the transferred qty + self.line.transferred += self.quantity + self.line.save() + + def _touch_order_updated_at(instance): """Bump updated_at on the parent order without triggering a full save.""" if not InvenTree.ready.canAppAccessDatabase(allow_test=True): @@ -3159,6 +3851,16 @@ def _touch_order_updated_at(instance): @receiver( post_delete, sender=ReturnOrderExtraLine, dispatch_uid='ro_extraline_post_delete' ) +@receiver( + post_save, + sender=TransferOrderLineItem, + dispatch_uid='transfer_order_lineitem_post_save', +) +@receiver( + post_delete, + sender=TransferOrderLineItem, + dispatch_uid='transfer_order_lineitem_post_delete', +) def update_order_on_lineitem_change(sender, instance, **kwargs): """Update parent order updated_at when any line item is saved or deleted.""" _touch_order_updated_at(instance) diff --git a/src/backend/InvenTree/order/serializers.py b/src/backend/InvenTree/order/serializers.py index e1a8de16f6..c2d1b909ac 100644 --- a/src/backend/InvenTree/order/serializers.py +++ b/src/backend/InvenTree/order/serializers.py @@ -19,6 +19,7 @@ import order.models import part.filters as part_filters import stock.models import stock.serializers +from common.settings import get_global_setting from company.serializers import ( AddressBriefSerializer, CompanyBriefSerializer, @@ -43,6 +44,7 @@ from order.status_codes import ( ReturnOrderLineStatus, ReturnOrderStatus, SalesOrderStatusGroups, + TransferOrderStatusGroups, ) from part.serializers import PartBriefSerializer from stock.status_codes import StockStatus @@ -1663,6 +1665,15 @@ class SalesOrderShipmentAllocationItemSerializer(serializers.Serializer): stock_item = data['stock_item'] quantity = data['quantity'] + if get_global_setting('SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS'): + if ( + stock_item.hasRequiredTests() + and not stock_item.passedAllRequiredTests() + ): + raise ValidationError({ + 'stock_item': _('Stock item has not passed all required tests') + }) + if stock_item.serialized and quantity != 1: raise ValidationError({ 'quantity': _('Quantity must be 1 for serialized stock item') @@ -1853,6 +1864,14 @@ class SalesOrderSerialAllocationSerializer(serializers.Serializer): stock_item = items[0] + if get_global_setting('SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS'): + if ( + stock_item.hasRequiredTests() + and not stock_item.passedAllRequiredTests() + ): + serials_unavailable.add(str(serial)) + continue + if not stock_item.in_stock: serials_unavailable.add(str(serial)) continue @@ -1901,7 +1920,9 @@ class SalesOrderSerialAllocationSerializer(serializers.Serializer): ) with transaction.atomic(): - order.models.SalesOrderAllocation.objects.bulk_create(allocations) + order.models.SalesOrderAllocation.objects.bulk_create( + allocations, batch_size=250 + ) class SalesOrderShipmentAllocationSerializer(serializers.Serializer): @@ -2278,3 +2299,622 @@ class ReturnOrderExtraLineSerializer( 'allow_null': True, }, ) + + +@register_importer() +class TransferOrderSerializer( + NotesFieldMixin, + InvenTreeCustomStatusSerializerMixin, + AbstractOrderSerializer, + InvenTreeModelSerializer, +): + """Serializer for a TransferOrder object.""" + + class Meta: + """Metaclass options.""" + + model = order.models.TransferOrder + fields = AbstractOrderSerializer.order_fields([ + 'take_from', + 'take_from_detail', + 'destination', + 'destination_detail', + 'consume', + 'complete_date', + ]) + read_only_fields = ['creation_date'] + extra_kwargs = {} + + def skip_create_fields(self): + """Skip these fields when instantiating a new object.""" + fields = super().skip_create_fields() + + return [*fields, 'duplicate'] + + @staticmethod + def annotate_queryset(queryset): + """Add extra information to the queryset. + + - Number of line items in the TransferOrder + - Number of completed line items in the TransferOrder + - Overdue status of the TransferOrder + """ + queryset = AbstractOrderSerializer.annotate_queryset(queryset) + + queryset = queryset.annotate( + completed_lines=SubqueryCount( + 'lines', filter=Q(quantity__lte=F('transferred')) + ) + ) + + queryset = queryset.annotate( + overdue=Case( + When( + order.models.TransferOrder.overdue_filter(), + then=Value(True, output_field=BooleanField()), + ), + default=Value(False, output_field=BooleanField()), + ) + ) + + return queryset + + take_from_detail = OptionalField( + serializer_class=stock.serializers.LocationSerializer, + serializer_kwargs={ + 'source': 'take_from', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, + ) + + destination_detail = OptionalField( + serializer_class=stock.serializers.LocationSerializer, + serializer_kwargs={ + 'source': 'destination', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + default_include=True, + ) + + +class TransferOrderHoldSerializer(OrderAdjustSerializer): + """Serializer for placing a TransferOrder on hold.""" + + def save(self): + """Save the serializer to 'hold' the order.""" + self.order.hold_order() + + +class TransferOrderIssueSerializer(OrderAdjustSerializer): + """Serializer for issuing a transfer order.""" + + def save(self): + """Save the serializer to 'issue' the order.""" + self.order.issue_order() + + +class TransferOrderCancelSerializer(OrderAdjustSerializer): + """Serializer for cancelling a TransferOrder.""" + + def save(self): + """Save the serializer to 'cancel' the order.""" + if not self.order.can_cancel: + raise ValidationError(_('Order cannot be cancelled')) + + self.order.cancel_order() + + +class TransferOrderCompleteSerializer(OrderAdjustSerializer): + """Serializer for completing a transfer order.""" + + class Meta: + """Metaclass options.""" + + fields = ['accept_incomplete_allocation'] + + accept_incomplete_allocation = serializers.BooleanField( + label=_('Accept Incomplete Allocation'), + help_text=_('Allow order to complete with incomplete allocations'), + required=False, + default=False, + ) + + def validate_accept_incomplete_allocation(self, value): + """Check if the 'accept_incomplete_allocation' field is required.""" + order = self.context['order'] + + if not value and not order.is_fully_allocated(): + raise ValidationError(_('Order has incomplete allocations')) + + return value + + def get_context_data(self): + """Custom context information for this serializer.""" + order = self.context['order'] + + return {'is_complete': order.is_completed()} + + def validate(self, data): + """Custom validation for the serializer.""" + data = super().validate(data) + self.order.can_complete( + raise_error=True, + allow_incomplete_lines=str2bool( + data.get('accept_incomplete_allocation', False) + ), + ) + return data + + def save(self): + """Save the serializer to 'complete' the order.""" + request = self.context.get('request') + data = self.validated_data + user = request.user if request else None + + self.order.complete_order( + user=user, + allow_incomplete_lines=data.get('accept_incomplete_allocation', False), + ) + + +@register_importer() +class TransferOrderLineItemSerializer( + DataImportExportSerializerMixin, + AbstractLineItemSerializer, + InvenTreeModelSerializer, +): + """Serializer for a TransferOrderLineItem object.""" + + class Meta: + """Metaclass options.""" + + model = order.models.TransferOrderLineItem + fields = AbstractLineItemSerializer.line_fields([ + 'allocated', + 'overdue', + 'part', + 'part_detail', + 'transferred', + # Annotated fields for part stocking information + 'available_stock', + 'available_variant_stock', + 'building', + 'on_order', + # Filterable detail fields + ]) + + @staticmethod + def annotate_queryset(queryset): + """Add some extra annotations to this queryset. + + - "overdue" status (boolean field) + - "available_quantity" + - "building" + - "on_order" + """ + queryset = queryset.annotate( + overdue=Case( + When( + Q(order__status__in=TransferOrderStatusGroups.OPEN) + & order.models.TransferOrderLineItem.OVERDUE_FILTER, + then=Value(True, output_field=BooleanField()), + ), + default=Value(False, output_field=BooleanField()), + ) + ) + + # Annotate each line with the available stock quantity + # To do this, we need to look at the total stock and any allocations + queryset = queryset.alias( + total_stock=part_filters.annotate_total_stock(reference='part__'), + allocated_to_sales_orders=part_filters.annotate_sales_order_allocations( + reference='part__' + ), + allocated_to_build_orders=part_filters.annotate_build_order_allocations( + reference='part__' + ), + ) + + queryset = queryset.annotate( + available_stock=Greatest( + ExpressionWrapper( + F('total_stock') + - F('allocated_to_sales_orders') + - F('allocated_to_build_orders'), + output_field=models.DecimalField(), + ), + 0, + output_field=models.DecimalField(), + ) + ) + + # Add information about the quantity of parts currently on order + queryset = queryset.annotate( + on_order=part_filters.annotate_on_order_quantity(reference='part__') + ) + + # Add information about the quantity of parts currently in production + queryset = queryset.annotate( + building=part_filters.annotate_in_production_quantity(reference='part__') + ) + + # Annotate total 'allocated' stock quantity + queryset = queryset.annotate( + allocated=Coalesce( + SubquerySum('allocations__quantity'), + Decimal(0), + output_field=models.DecimalField(), + ) + ) + + return queryset + + order_detail = OptionalField( + serializer_class=TransferOrderSerializer, + serializer_kwargs={ + 'source': 'order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + prefetch_fields=[ + 'order__created_by', + 'order__responsible', + 'order__project_code', + ], + ) + + part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + prefetch_fields=['part__pricing_data'], + ) + + # Annotated fields + overdue = serializers.BooleanField(read_only=True, allow_null=True) + available_stock = serializers.FloatField(read_only=True) + available_variant_stock = serializers.FloatField(read_only=True) + on_order = serializers.FloatField(label=_('On Order'), read_only=True) + building = serializers.FloatField(label=_('In Production'), read_only=True) + + quantity = InvenTreeDecimalField() + + allocated = serializers.FloatField(read_only=True) + + transferred = InvenTreeDecimalField(read_only=True) + + +class TransferOrderAllocationItemSerializer(serializers.Serializer): + """A serializer for allocating a single stock-item against a TransferOrder line item.""" + + class Meta: + """Metaclass options.""" + + fields = ['line_item', 'stock_item', 'quantity'] + + line_item = serializers.PrimaryKeyRelatedField( + queryset=order.models.TransferOrderLineItem.objects.all(), + many=False, + allow_null=False, + required=True, + label=_('Stock Item'), + ) + + def validate_line_item(self, line_item): + """Custom validation for the 'line_item' field. + + - Ensure the line_item is associated with the particular TransferOrder + """ + order = self.context['order'] + + # Ensure that the line item points to the correct order + if line_item.order != order: + raise ValidationError(_('Line item is not associated with this order')) + + return line_item + + stock_item = serializers.PrimaryKeyRelatedField( + queryset=stock.models.StockItem.objects.all(), + many=False, + allow_null=False, + required=True, + label=_('Stock Item'), + ) + + quantity = serializers.DecimalField( + max_digits=15, decimal_places=5, min_value=Decimal(0), required=True + ) + + def validate_quantity(self, quantity): + """Custom validation for the 'quantity' field.""" + if quantity <= 0: + raise ValidationError(_('Quantity must be positive')) + + return quantity + + def validate(self, data): + """Custom validation for the serializer. + + - Ensure that the quantity is 1 for serialized stock + - Quantity cannot exceed the available amount + """ + data = super().validate(data) + + stock_item = data['stock_item'] + quantity = data['quantity'] + + if stock_item.serialized and quantity != 1: + raise ValidationError({ + 'quantity': _('Quantity must be 1 for serialized stock item') + }) + + q = normalize(stock_item.unallocated_quantity()) + + if quantity > q: + raise ValidationError({'quantity': _(f'Available quantity ({q}) exceeded')}) + + return data + + +class TransferOrderLineItemAllocationSerializer(serializers.Serializer): + """DRF serializer for allocation of stock items against a transfer order line item.""" + + class Meta: + """Metaclass options.""" + + fields = ['items'] + + items = TransferOrderAllocationItemSerializer(many=True) + + def validate(self, data): + """Serializer validation.""" + data = super().validate(data) + + # Extract TransferOrder from serializer context + # order = self.context['order'] + + items = data.get('items', []) + + if len(items) == 0: + raise ValidationError(_('Allocation items must be provided')) + + return data + + def save(self): + """Perform the allocation of items against this order.""" + data = self.validated_data + + items = data['items'] + + with transaction.atomic(): + for entry in items: + # Create a new TransferOrderAllocation + allocation = order.models.TransferOrderAllocation( + line=entry.get('line_item'), + item=entry.get('stock_item'), + quantity=entry.get('quantity'), + ) + + allocation.full_clean() + allocation.save() + + +class TransferOrderAllocationSerializer( + FilterableSerializerMixin, InvenTreeModelSerializer +): + """Serializer for the TransferOrderAllocation model. + + This includes some fields from the related model objects. + """ + + class Meta: + """Metaclass options.""" + + model = order.models.TransferOrderAllocation + fields = [ + 'pk', + 'item', + 'quantity', + # Annotated read-only fields + 'line', + 'part', + 'order', + 'serial', + 'location', + # Extra detail fields + 'item_detail', + 'part_detail', + 'order_detail', + 'location_detail', + ] + read_only_fields = ['line', ''] + + part = serializers.PrimaryKeyRelatedField(source='item.part', read_only=True) + order = serializers.PrimaryKeyRelatedField( + source='line.order', many=False, read_only=True + ) + serial = serializers.CharField(source='get_serial', read_only=True, allow_null=True) + quantity = serializers.FloatField(read_only=False) + location = serializers.PrimaryKeyRelatedField( + source='item.location', many=False, read_only=True + ) + + # Extra detail fields + order_detail = OptionalField( + serializer_class=TransferOrderSerializer, + serializer_kwargs={ + 'source': 'line.order', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + ) + + part_detail = OptionalField( + serializer_class=PartBriefSerializer, + serializer_kwargs={ + 'source': 'item.part', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + ) + + item_detail = OptionalField( + serializer_class=stock.serializers.StockItemSerializer, + serializer_kwargs={ + 'source': 'item', + 'many': False, + 'read_only': True, + 'allow_null': True, + 'part_detail': False, + 'location_detail': False, + 'supplier_part_detail': False, + }, + ) + + location_detail = OptionalField( + serializer_class=stock.serializers.LocationBriefSerializer, + serializer_kwargs={ + 'source': 'item.location', + 'many': False, + 'read_only': True, + 'allow_null': True, + }, + ) + + +class TransferOrderSerialAllocationSerializer(serializers.Serializer): + """DRF serializer for allocation of serial numbers against a transfer order.""" + + class Meta: + """Metaclass options.""" + + fields = ['line_item', 'quantity', 'serial_numbers'] + + line_item = serializers.PrimaryKeyRelatedField( + queryset=order.models.TransferOrderLineItem.objects.all(), + many=False, + required=True, + allow_null=False, + label=_('Line Item'), + ) + + def validate_line_item(self, line_item): + """Ensure that the line_item is valid.""" + order = self.context['order'] + + # Ensure that the line item points to the correct order + if line_item.order != order: + raise ValidationError(_('Line item is not associated with this order')) + + return line_item + + quantity = serializers.IntegerField( + min_value=1, required=True, allow_null=False, label=_('Quantity') + ) + + serial_numbers = serializers.CharField( + label=_('Serial Numbers'), + help_text=_('Enter serial numbers to allocate'), + required=True, + allow_blank=False, + ) + + def validate(self, data): + """Validation for the serializer. + + - Ensure the serial_numbers and quantity fields match + - Check that all serial numbers exist + - Check that the serial numbers are not yet allocated + """ + data = super().validate(data) + + line_item = data['line_item'] + quantity = data['quantity'] + serial_numbers = data['serial_numbers'] + + part = line_item.part + + try: + data['serials'] = extract_serial_numbers( + serial_numbers, quantity, part.get_latest_serial_number(), part=part + ) + except DjangoValidationError as e: + raise ValidationError({'serial_numbers': e.messages}) + + serials_not_exist = set() + serials_unavailable = set() + stock_items_to_allocate = [] + + for serial in data['serials']: + serial = str(serial).strip() + + items = stock.models.StockItem.objects.filter( + part=part, serial=serial, quantity=1 + ) + + if not items.exists(): + serials_not_exist.add(str(serial)) + continue + + stock_item = items[0] + + if not stock_item.in_stock: + serials_unavailable.add(str(serial)) + continue + + if stock_item.unallocated_quantity() < 1: + serials_unavailable.add(str(serial)) + continue + + # At this point, the serial number is valid, and can be added to the list + stock_items_to_allocate.append(stock_item) + + if len(serials_not_exist) > 0: + error_msg = _('No match found for the following serial numbers') + error_msg += ': ' + error_msg += ','.join(sorted(serials_not_exist)) + + raise ValidationError({'serial_numbers': error_msg}) + + if len(serials_unavailable) > 0: + error_msg = _('The following serial numbers are unavailable') + error_msg += ': ' + error_msg += ','.join(sorted(serials_unavailable)) + + raise ValidationError({'serial_numbers': error_msg}) + + data['stock_items'] = stock_items_to_allocate + + return data + + def save(self): + """Allocate stock items against the transfer order.""" + data = self.validated_data + + line_item = data['line_item'] + stock_items = data['stock_items'] + + allocations = [] + + for stock_item in stock_items: + # Create a new TransferOrderAllocation + allocations.append( + order.models.TransferOrderAllocation( + line=line_item, item=stock_item, quantity=1 + ) + ) + + with transaction.atomic(): + order.models.TransferOrderAllocation.objects.bulk_create(allocations) diff --git a/src/backend/InvenTree/order/status_codes.py b/src/backend/InvenTree/order/status_codes.py index 7ec5756b92..d8893a1fa3 100644 --- a/src/backend/InvenTree/order/status_codes.py +++ b/src/backend/InvenTree/order/status_codes.py @@ -115,3 +115,30 @@ class ReturnOrderLineStatus(StatusCode): # Item is rejected REJECT = 60, _('Reject'), ColorEnum.danger + + +class TransferOrderStatus(StatusCode): + """Defines a set of status codes for a TransferOrder.""" + + # Order status codes + PENDING = 10, _('Pending'), ColorEnum.secondary # Order is pending (not yet issued) + ISSUED = 20, _('Issued'), ColorEnum.primary # Order has been issued + ON_HOLD = 25, _('On Hold'), ColorEnum.warning # Order is on hold + COMPLETE = 30, _('Complete'), ColorEnum.success # Order has been completed + CANCELLED = 40, _('Cancelled'), ColorEnum.danger # Order was cancelled + + +class TransferOrderStatusGroups: + """Groups for TransferOrderStatus codes.""" + + # Open orders + OPEN = [ + TransferOrderStatus.PENDING.value, + TransferOrderStatus.ON_HOLD.value, + TransferOrderStatus.ISSUED.value, + ] + + # Failed orders + FAILED = [TransferOrderStatus.CANCELLED.value] + + COMPLETE = [TransferOrderStatus.COMPLETE.value] diff --git a/src/backend/InvenTree/order/test_api.py b/src/backend/InvenTree/order/test_api.py index 7996301b1d..2da8cd6115 100644 --- a/src/backend/InvenTree/order/test_api.py +++ b/src/backend/InvenTree/order/test_api.py @@ -27,6 +27,8 @@ from order.status_codes import ( ReturnOrderStatus, SalesOrderStatus, SalesOrderStatusGroups, + TransferOrderStatus, + TransferOrderStatusGroups, ) from part.models import Part from stock.models import StockItem, StockLocation @@ -46,9 +48,10 @@ class OrderTest(InvenTreeAPITestCase): 'stock', 'order', 'sales_order', + 'transfer_order', ] - roles = ['purchase_order.change', 'sales_order.change'] + roles = ['purchase_order.change', 'sales_order.change', 'transfer_order.change'] def filter(self, filters, count): """Test API filters.""" @@ -2404,6 +2407,43 @@ class SalesOrderAllocateTest(OrderTest): assert_subset=True, ) + def test_block_on_required_tests(self): + """Test the SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS setting.""" + from part.models import PartTestTemplate + + line = self.order.lines.first() + part = line.part + + # Make this a testable part + part.testable = True + part.save() + + # Create a required test + PartTestTemplate.objects.create( + part=part, test_name='A required test', required=True + ) + + data = { + 'items': [ + { + 'line_item': line.pk, + 'stock_item': part.stock_items.last().pk, + 'quantity': line.quantity, + } + ] + } + + set_global_setting('SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS', True) + + response = self.post(self.url, data, expected_code=400) + self.assertIn( + 'Stock item has not passed all required tests', str(response.data) + ) + + set_global_setting('SALESORDER_BLOCK_INCOMPLETE_ITEM_TESTS', False) + + response = self.post(self.url, data, expected_code=201) + class ReturnOrderTests(InvenTreeAPITestCase): """Unit tests for ReturnOrder API endpoints.""" @@ -2855,3 +2895,848 @@ class ReturnOrderLineItemTests(InvenTreeAPITestCase): line = models.ReturnOrderLineItem.objects.get(pk=1) self.assertEqual(float(line.price.amount), 15.75) + + +class TransferOrderTest(OrderTest): + """Tests for the TransferOrder API.""" + + LIST_URL = reverse('api-transfer-order-list') + + def test_transfer_order_list(self): + """Test the TransferOrder list API endpoint.""" + # all orders + self.filter({}, 5) + + # filter by outstanding + self.filter({'outstanding': True}, 3) + self.filter({'outstanding': False}, 2) + + # Filter by status + self.filter({'status': TransferOrderStatus.PENDING.value}, 1) + self.filter({'status': SalesOrderStatus.COMPLETE.value}, 1) + self.filter({'status': 99}, 0) # Invalid + + # Filter by "reference" + self.filter({'reference': 'TO-123'}, 1) + self.filter({'reference': 'TO-999'}, 0) + + # Filter by "assigned_to_me" + self.filter({'assigned_to_me': 1}, 0) + self.filter({'assigned_to_me': 0}, 5) + + def test_overdue(self): + """Test "overdue" status.""" + self.filter({'overdue': True}, 0) + self.filter({'overdue': False}, 5) + + # pick two orders that are still open (not cancelled or complete) + for pk in [1, 4]: + order = models.TransferOrder.objects.get(pk=pk) + order.target_date = datetime.now().date() - timedelta(days=10) + order.save() + + self.filter({'overdue': True}, 2) + self.filter({'overdue': False}, 3) + + def test_transfer_order_detail(self): + """Test the TransferOrder detail endpoint.""" + url = '/api/order/transfer-order/1/' + + response = self.get(url) + + data = response.data + + self.assertEqual(data['pk'], 1) + + def test_transfer_order_attachments(self): + """Test the list endpoint for the Transfer Order Attachments.""" + url = reverse('api-attachment-list') + + # Filter by 'transferorder' + self.get( + url, data={'model_type': 'transferorder', 'model_id': 1}, expected_code=200 + ) + + def test_transfer_order_operations(self): + """Test that we can create / edit and delete a TransferOrder via the API.""" + n = models.TransferOrder.objects.count() + + url = reverse('api-transfer-order-list') + + # Initially we do not have "add" permission for the TransferOrder model, + # so this POST request should return 403 (denied) + response = self.post( + url, + {'reference': 'TO-43245', 'description': 'Transfer order'}, + expected_code=403, + ) + + self.assignRole('transfer_order.add') + + # Now we should be able to create a TransferOrder via the API + response = self.post( + url, + {'reference': 'TO-12345', 'description': 'Transfer order'}, + expected_code=201, + ) + + # Check that the new order has been created + self.assertEqual(models.TransferOrder.objects.count(), n + 1) + + # Grab the PK for the newly created TransferOrder + pk = response.data['pk'] + + # Basic checks against the newly created TransferOrder + so = models.TransferOrder.objects.get(pk=pk) + self.assertEqual(so.reference, 'TO-12345') + self.assertEqual(so.created_by.username, 'testuser') + + # Try to create a TO with identical reference (should fail) + response = self.post( + url, + { + 'customer': 4, + 'reference': 'TO-12345', + 'description': 'Another transfer order', + }, + expected_code=400, + ) + + url = reverse('api-transfer-order-detail', kwargs={'pk': pk}) + + # Extract detail info for the TransferOrder + response = self.get(url) + self.assertEqual(response.data['reference'], 'TO-12345') + + # Try to alter (edit) the TransferOrder + # Initially try with an invalid reference field value + response = self.patch(url, {'reference': 'TO-12345-a'}, expected_code=400) + + response = self.patch(url, {'reference': 'TO-12346'}, expected_code=200) + + # Reference should have changed + self.assertEqual(response.data['reference'], 'TO-12346') + + # Now, let's try to delete this TransferOrder + # Initially, we do not have the required permission + response = self.delete(url, expected_code=403) + + self.assignRole('transfer_order.delete') + + response = self.delete(url, expected_code=204) + + # Check that the number of transfer orders has decreased + self.assertEqual(models.TransferOrder.objects.count(), n) + + # And the resource should no longer be available + response = self.get(url, expected_code=404) + + def test_transfer_order_create(self): + """Test that we can create a new TransferOrder via the API.""" + self.assignRole('transfer_order.add') + + url = reverse('api-transfer-order-list') + + # Will fail due to invalid reference field + response = self.post( + url, + {'reference': '1234566778', 'description': 'A test transfer order'}, + expected_code=400, + ) + + self.assertIn( + 'Reference must match required pattern', str(response.data['reference']) + ) + + self.post( + url, + {'reference': 'TO-12345', 'description': 'A better test transfer order'}, + expected_code=201, + ) + + def test_transfer_order_cancel(self): + """Test API endpoint for cancelling a TransferOrder.""" + to = models.TransferOrder.objects.get(pk=1) + + self.assertEqual(to.status, TransferOrderStatus.PENDING) + + url = reverse('api-transfer-order-cancel', kwargs={'pk': to.pk}) + + # Try to cancel, without permission + self.post(url, {}, expected_code=403) + + self.assignRole('transfer_order.add') + + self.post(url, {}, expected_code=201) + + to.refresh_from_db() + + self.assertEqual(to.status, TransferOrderStatus.CANCELLED) + + def test_transfer_order_hold(self): + """Test API endpoint for holdling a TransferOrder.""" + to = models.TransferOrder.objects.get(pk=1) + + self.assertEqual(to.status, TransferOrderStatus.PENDING) + + url = reverse('api-transfer-order-hold', kwargs={'pk': to.pk}) + + # Try to hold, without permission + self.post(url, {}, expected_code=403) + + self.assignRole('transfer_order.add') + + self.post(url, {}, expected_code=201) + + to.refresh_from_db() + + self.assertEqual(to.status, TransferOrderStatus.ON_HOLD) + + def test_transfer_order_calendar(self): + """Test the calendar export endpoint.""" + # Create required transfer orders + self.assignRole('transfer_order.add') + + for i in range(1, 9): + self.post( + reverse('api-transfer-order-list'), + { + 'reference': f'TO-1100000{i}', + 'description': f'Calendar SO {i}', + 'target_date': f'2024-12-{i:02d}', + }, + expected_code=201, + ) + + # Cancel a few orders - these will not show in incomplete view below + for to in models.TransferOrder.objects.filter(target_date__isnull=False): + if to.reference in [ + 'TO-11000006', + 'TO-11000007', + 'TO-11000008', + 'TO-11000009', + ]: + self.post( + reverse('api-transfer-order-cancel', kwargs={'pk': to.pk}), + expected_code=201, + ) + + url = reverse('api-po-so-calendar', kwargs={'ordertype': 'transfer-order'}) + + # Test without completed orders + response = self.get(url, expected_code=200, format=None) + + number_orders = len( + models.TransferOrder.objects.filter(target_date__isnull=False).filter( + status__lt=TransferOrderStatus.COMPLETE.value + ) + ) + + # Transform content to a Calendar object + calendar = Calendar.from_ical(response.content) + n_events = 0 + # Count number of events in calendar + for component in calendar.walk(): + if component.name == 'VEVENT': + n_events += 1 + + self.assertGreaterEqual(n_events, 1) + self.assertEqual(number_orders, n_events) + + # Test with completed orders + response = self.get( + url, data={'include_completed': 'True'}, expected_code=200, format=None + ) + + number_orders_incl_complete = len( + models.TransferOrder.objects.filter(target_date__isnull=False) + ) + self.assertGreater(number_orders_incl_complete, number_orders) + + # Transform content to a Calendar object + calendar = Calendar.from_ical(response.content) + n_events = 0 + # Count number of events in calendar + for component in calendar.walk(): + if component.name == 'VEVENT': + n_events += 1 + + self.assertGreaterEqual(n_events, 1) + self.assertEqual(number_orders_incl_complete, n_events) + + def test_export(self): + """Test we can export the TransferOrder list.""" + n = models.TransferOrder.objects.count() + + # Check there are some sales orders + self.assertGreater(n, 0) + + # Download file, check we get a 200 response + for fmt in ['csv', 'xlsx', 'tsv']: + self.export_data( + reverse('api-transfer-order-list'), + export_format=fmt, + decode=fmt == 'csv', + expected_code=200, + expected_fn=r'InvenTree_TransferOrder_.+', + ) + + def test_transfer_order_complete(self): + """Tests for marking a TransferOrder as complete.""" + self.assignRole('transfer_order.add') + destination = StockLocation.objects.first() + # Let's create a TransferOrder + to = models.TransferOrder.objects.create( + reference='TO-12345', description='Test TO' + ) + + self.assertEqual(to.status, TransferOrderStatus.PENDING.value) + + # Create a line item + part = Part.objects.exclude(virtual=True).first() + + line = models.TransferOrderLineItem.objects.create( + order=to, part=part, quantity=10 + ) + + # issue the order + url = reverse('api-transfer-order-issue', kwargs={'pk': to.pk}) + self.post(url, {}, expected_code=201) + to.refresh_from_db() + self.assertEqual(to.status, TransferOrderStatus.ISSUED.value) + + # Allocate some stock + item = StockItem.objects.create( + part=part, quantity=100, location=None, batch='transfer-order-test' + ) + short_allocation = models.TransferOrderAllocation.objects.create( + quantity=5, line=line, item=item + ) + + # attempt to complete the order, but fail because there are incomplete allocations + url = reverse('api-transfer-order-complete', kwargs={'pk': to.pk}) + response = self.post(url, {}, expected_code=400) + self.assertIn('has incomplete allocations', str(response.data)) + # allocate more stock + short_allocation.delete() + models.TransferOrderAllocation.objects.create(quantity=10, line=line, item=item) + + # attempt to complete the order, but fail because there is no destination yet + url = reverse('api-transfer-order-complete', kwargs={'pk': to.pk}) + response = self.post(url, {}, expected_code=400) + self.assertIn('until a destination location is set', str(response.data)) + # add destination + to.destination = destination + to.save() + + # Ok, now we should be able to "complete" the transfer via the API + url = reverse('api-transfer-order-complete', kwargs={'pk': to.pk}) + self.post(url, {}, expected_code=201) + + to.refresh_from_db() + self.assertEqual(to.status, TransferOrderStatus.COMPLETE.value) + self.assertIsNotNone(to.complete_date) + + # Now, let's try *again* (it should fail as the order is already complete) + response = self.post(url, {}, expected_code=400) + self.assertIn('Order is already complete', str(response.data)) + + # Now, we make sure the affected stock was transferred to the correct location + StockItem.objects.get( + part=part, quantity=10, batch='transfer-order-test', location=destination + ) + + def test_transfer_order_consume(self): + """Tests for marking a TransferOrder consume the stock it 'transfers'.""" + self.assignRole('transfer_order.add') + destination = StockLocation.objects.first() + # Let's create a TransferOrder + to = models.TransferOrder.objects.create( + reference='TO-12345', + description='Test TO', + consume=True, + destination=destination, + ) + + self.assertEqual(to.status, TransferOrderStatus.PENDING.value) + + # Create a line item + part = Part.objects.exclude(virtual=True).first() + + line = models.TransferOrderLineItem.objects.create( + order=to, part=part, quantity=10 + ) + + # issue the order + url = reverse('api-transfer-order-issue', kwargs={'pk': to.pk}) + self.post(url, {}, expected_code=201) + to.refresh_from_db() + self.assertEqual(to.status, TransferOrderStatus.ISSUED.value) + + # Allocate some stock + item = StockItem.objects.create( + part=part, quantity=100, location=None, batch='transfer-order-test' + ) + models.TransferOrderAllocation.objects.create(quantity=10, line=line, item=item) + + # Ok, now we should be able to "complete" the transfer via the API + url = reverse('api-transfer-order-complete', kwargs={'pk': to.pk}) + self.post(url, {}, expected_code=201) + + to.refresh_from_db() + self.assertEqual(to.status, TransferOrderStatus.COMPLETE.value) + self.assertIsNotNone(to.complete_date) + + # Now, we make sure the affected stock was 'consumed', reducing available quantity + item.refresh_from_db() + self.assertEqual(item.quantity, 90) + + # and that it wasn't transferred to the destination + with self.assertRaises(StockItem.DoesNotExist): + StockItem.objects.get( + part=part, + quantity=10, + batch='transfer-order-test', + location=destination, + ) + + def test_output_options(self): + """Test the output options for the TransferOrder detail endpoint.""" + self.run_output_test( + reverse('api-transfer-order-detail', kwargs={'pk': 1}), + ['take_from_detail', 'destination_detail'], + ) + + +class TransferOrderLineItemTest(OrderTest): + """Tests for the TransferOrderLineItem API.""" + + LIST_URL = reverse('api-transfer-order-line-list') + + # adjust counts in asserts based on those created in setUpTestData + # plus those in fixtures + NUM_LINE_ITEMS_IN_FIXTURES = 2 + + @classmethod + def setUpTestData(cls): + """Init routine for this unit test class.""" + super().setUpTestData() + + # List of 'transferrable' parts + parts = Part.objects.exclude(virtual=True) + + lines = [] + + # Create a bunch of TransferOrderLineItems for each order + for idx, to in enumerate(models.TransferOrder.objects.all()): + for part in parts: + lines.append( + models.TransferOrderLineItem( + order=to, + part=part, + quantity=(idx + 1) * 5, + reference=f'Order {to.reference} - line {idx}', + ) + ) + + # Bulk create + models.TransferOrderLineItem.objects.bulk_create(lines) + + cls.url = reverse('api-transfer-order-line-list') + + def test_transfer_order_line_list(self): + """Test list endpoint.""" + response = self.get(self.url, {}, expected_code=200) + + n = models.TransferOrderLineItem.objects.count() + + # We should have received *all* lines + self.assertEqual(len(response.data), n) + + # List *all* lines, but paginate + response = self.get(self.url, {'limit': 5}, expected_code=200) + + self.assertEqual(response.data['count'], n) + self.assertEqual(len(response.data['results']), 5) + + n_orders = models.TransferOrder.objects.count() + n_parts = Part.objects.exclude(virtual=True).count() + + # List by part + # fixures add line items, avoid those here with [:3] for predictable counts + for part in Part.objects.exclude(virtual=True)[:3]: + response = self.get(self.url, {'part': part.pk, 'limit': 10}) + self.assertEqual(response.data['count'], n_orders) + + # List by order + # fixures add line items, avoid those here with [:3] for predictable counts + for order in models.TransferOrder.objects.all()[:3]: + response = self.get(self.url, {'order': order.pk, 'limit': 10}) + # count of line items equal to number of parts because + # we created a line item per part on each order in setUpTestData + self.assertEqual(response.data['count'], n_parts) + + # Filter by 'completed' status + self.filter({'completed': 1}, 1) + self.filter({'completed': 0}, n - 1) + + # Filter by 'allocated' status + self.filter({'allocated': 'true'}, 2) + self.filter({'allocated': 'false'}, n - 2) + + def test_transfer_order_line_allocated_filters(self): + """Test filtering by allocation status for a TransferOrderLineItem.""" + self.assignRole('transfer_order.add') + + destination = StockLocation.objects.first() + assert destination + + response = self.post( + reverse('api-transfer-order-list'), + { + 'reference': 'TO-12345', + 'description': 'Test Transfer Order', + 'destination': destination.pk, + }, + ) + + order_id = response.data['pk'] + order = models.TransferOrder.objects.get(pk=order_id) + + transfer_order_line_url = reverse('api-transfer-order-line-list') + + # Initially, there should be no line items against this order + response = self.get(transfer_order_line_url, {'order': order_id}) + + self.assertEqual(len(response.data), 0) + + parts = [25, 50, 100] + + # Let's create some new line items + for part_id in parts: + self.post( + transfer_order_line_url, + {'order': order_id, 'part': part_id, 'quantity': 10}, + ) + + # Should be three items now + response = self.get(transfer_order_line_url, {'order': order_id}) + + self.assertEqual(len(response.data), 3) + + for item in response.data: + # Check that the line item has been created + self.assertEqual(item['order'], order_id) + + # Check that the line quantities are correct + self.assertEqual(item['quantity'], 10) + self.assertEqual(item['allocated'], 0) + self.assertEqual(item['transferred'], 0) + + # Initial API filters should return no results + self.filter({'order': order_id, 'allocated': 1}, 0) + self.filter({'order': order_id, 'completed': 1}, 0) + + # issue the order + order_issue_url = reverse('api-transfer-order-issue', kwargs={'pk': order.pk}) + self.post(order_issue_url, {}, expected_code=201) + + # Next, allocate stock against 2 line items + for item in parts[:2]: + p = Part.objects.get(pk=item) + s = StockItem.objects.create(part=p, quantity=100) + l = models.TransferOrderLineItem.objects.filter(order=order, part=p).first() + assert l + + # Allocate against the API + self.post( + reverse('api-transfer-order-allocate', kwargs={'pk': order.pk}), + {'items': [{'line_item': l.pk, 'stock_item': s.pk, 'quantity': 10}]}, + ) + + # Filter by 'fully allocated' status + self.filter({'order': order_id, 'allocated': 1}, 2) + self.filter({'order': order_id, 'allocated': 0}, 1) + + self.filter({'order': order_id, 'completed': 1}, 0) + self.filter({'order': order_id, 'completed': 0}, 3) + + # Finally, attempt to transfer this line item + # we have incomplete allocations, so must specify arg + self.post( + reverse('api-transfer-order-complete', kwargs={'pk': order.pk}), + {'accept_incomplete_allocation': 'true'}, + ) + + # Filter by 'completed' status + self.filter({'order': order_id, 'completed': 1}, 2) + self.filter({'order': order_id, 'completed': 0}, 1) + + def test_output_options(self): + """Test the various output options for the TransferOrderLineItem detail endpoint.""" + self.run_output_test( + reverse('api-transfer-order-line-detail', kwargs={'pk': 1}), + ['part_detail', 'order_detail'], + ) + + +class TransferOrderDownloadTest(OrderTest): + """Unit tests for downloading TransferOrder data via the API endpoint.""" + + def test_download_fail(self): + """Test that downloading without the 'export' option fails.""" + url = reverse('api-transfer-order-list') + + response = self.export_data(url, export_plugin='no-plugin', expected_code=400) + self.assertIn('is not a valid choice', str(response['export_plugin'])) + + def test_download_xlsx(self): + """Test xlsx file download.""" + url = reverse('api-transfer-order-list') + + # Download .xls file + with self.export_data( + url, export_format='xlsx', expected_code=200, decode=False + ) as file: + self.assertIsInstance(file, io.BytesIO) + + def test_download_csv(self): + """Test that the list of transfer orders can be downloaded as a .csv file.""" + url = reverse('api-transfer-order-list') + + required_cols = [ + 'Line Items', + 'Completed Lines', + 'ID', + 'Reference', + 'Order Status', + 'Description', + 'Project Code', + 'Responsible', + 'Consume Stock', + ] + + excluded_cols = ['metadata'] + + # Download .xls file + with self.export_data(url, export_format='csv') as file: + data = self.process_csv( + file, + required_cols=required_cols, + excluded_cols=excluded_cols, + required_rows=models.TransferOrder.objects.count(), + ) + + for line in data: + order = models.TransferOrder.objects.get(pk=line['ID']) + + self.assertEqual(line['Description'], order.description) + self.assertEqual(line['Order Status'], str(order.status)) + + # Download only outstanding transfer orders + with self.export_data(url, {'outstanding': True}, export_format='tsv') as file: + self.process_csv( + file, + required_cols=required_cols, + excluded_cols=excluded_cols, + required_rows=models.TransferOrder.objects.filter( + status__in=TransferOrderStatusGroups.OPEN + ).count(), + delimiter='\t', + ) + + +class TransferOrderAllocateTest(OrderTest): + """Unit tests for allocating stock items against a TransferOrder.""" + + @classmethod + def setUpTestData(cls): + """Init routine for this unit test class.""" + super().setUpTestData() + + def setUp(self): + """Init routines for this unit testing class.""" + super().setUp() + + self.assignRole('transfer_order.add') + + self.url = reverse('api-transfer-order-allocate', kwargs={'pk': 1}) + self.url_serialized = reverse( + 'api-transfer-order-allocate-serials', kwargs={'pk': 1} + ) + + self.order = models.TransferOrder.objects.get(pk=1) + + # Create some line items for this transfer order + parts = Part.objects.exclude(virtual=True) + + for part in parts: + # Create a new line item + models.TransferOrderLineItem.objects.create( + order=self.order, part=part, quantity=5 + ) + + # Ensure we have stock! + StockItem.objects.create(part=part, quantity=100) + + # Create a new shipment against this TransferOrder + # self.shipment = models.TransferOrderShipment.objects.create(order=self.order) + + def test_invalid(self): + """Test POST with invalid data.""" + # No data + response = self.post(self.url, {}, expected_code=400) + + self.assertIn('This field is required', str(response.data['items'])) + + # Test with a single line items + line = self.order.lines.first() + part = line.part + + # Valid stock_item, but quantity is invalid + data = { + 'items': [ + { + 'line_item': line.pk, + 'stock_item': part.stock_items.last().pk, + 'quantity': 0, + } + ] + } + + response = self.post(self.url, data, expected_code=400) + + self.assertIn('Quantity must be positive', str(response.data['items'])) + + # Valid stock item, too much quantity + data['items'][0]['quantity'] = 250 + + response = self.post(self.url, data, expected_code=400) + + self.assertIn('Available quantity (100) exceeded', str(response.data['items'])) + + def test_allocate(self): + """Test that the allocation endpoint acts as expected, when provided with valid data!""" + # First, check that there are no line items allocated against this TransferOrder + self.assertEqual(self.order.stock_allocations.count(), 0) + + data = {'items': []} + + for line in self.order.lines.all(): + for stock_item in line.part.stock_items.filter(quantity__gt=5): + # Find a non-serialized stock item to allocate + if not stock_item.serialized: + break + + # Fully-allocate each line + data['items'].append({ + 'line_item': line.pk, + 'stock_item': stock_item.pk, + 'quantity': 5, + }) + + self.post(self.url, data, expected_code=201) + + # There should have been 1 stock item allocated against each line item + n_lines = self.order.lines.count() + + self.assertEqual(self.order.stock_allocations.count(), n_lines) + + for line in self.order.lines.all(): + self.assertEqual(line.allocations.count(), 1) + + def test_allocate_serials(self): + """Test that the allocation endpoint acts as expected, when provided with serials.""" + self.assertEqual(self.order.stock_allocations.count(), 0) + + trackable_lines = self.order.lines.filter(part__trackable=True) + for line in trackable_lines: + stock_item = ( + line.part.stock_items + .exclude(serial=None) + .filter(StockItem.IN_STOCK_FILTER) + .first() + ) + + # Allocate this serialized item to the transfer order + data = { + 'line_item': line.pk, + 'quantity': 1, + 'serial_numbers': stock_item.serial, + } + + self.post(self.url_serialized, data, expected_code=201) + + # There should have been 1 stock item allocated against each line item + n_lines = trackable_lines.count() + self.assertEqual(self.order.stock_allocations.count(), n_lines) + + for line in trackable_lines.all(): + self.assertEqual(line.allocations.count(), 1) + + def test_allocate_variant(self): + """Test that the allocation endpoint acts as expected, when provided with variant.""" + # First, check that there are no line items allocated against this TransferOrder + self.assertEqual(self.order.stock_allocations.count(), 0) + + data = {'items': []} + + def check_template(line_item): + return line_item.part.is_template + + for line in filter(check_template, self.order.lines.all()): + stock_item: Optional[StockItem] = None + + stock_item = None + + # Allocate a matching variant + parts: list[Part] = ( + Part.objects + .exclude(virtual=True) + .exclude(is_template=True) + .filter(variant_of=line.part.pk) + ) + # if we don't have a matching variant, continue + if not parts.exists(): + continue + for part in parts: + # ensure we have the quantity necessary to allocate + if not part.stock_items.filter(quantity__gt=5).exists(): + continue + + stock_item = part.stock_items.last() + + for item in part.stock_items.filter(quantity__gt=5): + if item.serialized: + continue + + stock_item = item + break + + if stock_item is not None: + break + + if stock_item is None: + raise self.fail('No stock item found for part') # pragma: no cover + + # Fully-allocate each line + data['items'].append({ + 'line_item': line.pk, + 'stock_item': stock_item.pk, + 'quantity': 5, + }) + + self.post(self.url, data, expected_code=201) + + # At least one item should be allocated, and all should be variants + self.assertGreater(self.order.stock_allocations.count(), 0) + for allocation in self.order.stock_allocations.all(): + self.assertNotEqual(allocation.item.part.pk, allocation.line.part.pk) + + def test_output_options(self): + """Test the various output options for the SalesOrderAllocation detail endpoint.""" + self.run_output_test( + reverse('api-transfer-order-allocation-list'), + ['part_detail', 'item_detail', 'order_detail', 'location_detail'], + assert_subset=True, + ) diff --git a/src/backend/InvenTree/order/validators.py b/src/backend/InvenTree/order/validators.py index a4873679bd..ce2004de76 100644 --- a/src/backend/InvenTree/order/validators.py +++ b/src/backend/InvenTree/order/validators.py @@ -22,6 +22,13 @@ def generate_next_return_order_reference(): return ReturnOrder.generate_reference() +def generate_next_transfer_order_reference(): + """Generate the next available TransferOrder reference.""" + from order.models import TransferOrder + + return TransferOrder.generate_reference() + + def validate_sales_order_reference_pattern(pattern): """Validate the SalesOrder reference 'pattern' setting.""" from order.models import SalesOrder @@ -62,3 +69,17 @@ def validate_return_order_reference(value): from order.models import ReturnOrder ReturnOrder.validate_reference_field(value) + + +def validate_transfer_order_reference_pattern(pattern): + """Validate the TransferOrder reference 'pattern' setting.""" + from order.models import TransferOrder + + TransferOrder.validate_reference_pattern(pattern) + + +def validate_transfer_order_reference(value): + """Validate that the ReturnOrder reference field matches the required pattern.""" + from order.models import TransferOrder + + TransferOrder.validate_reference_field(value) diff --git a/src/backend/InvenTree/part/api.py b/src/backend/InvenTree/part/api.py index 23e154f751..0eac19e221 100644 --- a/src/backend/InvenTree/part/api.py +++ b/src/backend/InvenTree/part/api.py @@ -264,9 +264,12 @@ class CategoryDetail(CategoryMixin, OutputOptionsMixin, CustomRetrieveUpdateDest def destroy(self, request, *args, **kwargs): """Delete a Part category instance via the API.""" - delete_parts = str2bool(request.data.get('delete_parts', False)) + serializer = part_serializers.CategoryDeleteSerializer(data=request.data) + serializer.is_valid(raise_exception=True) + + delete_parts = str2bool(serializer.validated_data.get('delete_parts', False)) delete_child_categories = str2bool( - request.data.get('delete_child_categories', False) + serializer.validated_data.get('delete_child_categories', False) ) return super().destroy( @@ -599,7 +602,7 @@ class PartValidateBOM(RetrieveUpdateAPI): queryset = Part.objects.all() serializer_class = part_serializers.PartBomValidateSerializer - role_required = 'bom.change' + role_required = 'bom' @extend_schema( responses={ @@ -610,7 +613,7 @@ class PartValidateBOM(RetrieveUpdateAPI): def update(self, request, *args, **kwargs): """Validate the referenced BomItem instance. - As this task if offloaded to the background worker, + As this task is offloaded to the background worker, we return information about the background task which is performing the validation. """ part = self.get_object() @@ -729,6 +732,23 @@ class PartFilter(FilterSet): # Filter items which have an 'in_stock' level higher than 'minimum_stock' return queryset.filter(Q(total_in_stock__gte=F('minimum_stock'))) + high_stock = rest_filters.BooleanFilter( + label='High stock', method='filter_high_stock' + ) + + def filter_high_stock(self, queryset, name, value): + """Filter by "high stock" status.""" + if str2bool(value): + # Ignore any parts which do not have a specified 'maximum_stock' level + # Filter items which have an 'in_stock' level higher than 'maximum_stock' + return queryset.exclude(maximum_stock=0).filter( + Q(total_in_stock__gt=F('maximum_stock')) + ) + # Filter items which have an 'in_stock' level lower than 'maximum_stock' + return queryset.filter( + Q(total_in_stock__lte=F('maximum_stock')) | Q(maximum_stock=0) + ).distinct() + # has_stock filter has_stock = rest_filters.BooleanFilter(label='Has stock', method='filter_has_stock') @@ -1290,6 +1310,10 @@ class BomFilter(FilterSet): label=_('Assembly part is testable'), field_name='part__testable' ) + part_locked = rest_filters.BooleanFilter( + label=_('Assembly part is locked'), field_name='part__locked' + ) + # Filters for linked 'sub_part' sub_part_active = rest_filters.BooleanFilter( label=_('Component part is active'), field_name='sub_part__active' @@ -1406,7 +1430,11 @@ class BomOutputOptions(OutputConfiguration): class BomList( - BomMixin, DataExportViewMixin, OutputOptionsMixin, ListCreateDestroyAPIView + BomMixin, + BulkUpdateMixin, + DataExportViewMixin, + OutputOptionsMixin, + ListCreateDestroyAPIView, ): """API endpoint for accessing a list of BomItem objects. diff --git a/src/backend/InvenTree/part/filters.py b/src/backend/InvenTree/part/filters.py index d6610260d5..2c832c2e9e 100644 --- a/src/backend/InvenTree/part/filters.py +++ b/src/backend/InvenTree/part/filters.py @@ -37,7 +37,11 @@ from sql_util.utils import SubquerySum import part.models import stock.models from build.status_codes import BuildStatusGroups -from order.status_codes import PurchaseOrderStatusGroups, SalesOrderStatusGroups +from order.status_codes import ( + PurchaseOrderStatusGroups, + SalesOrderStatusGroups, + TransferOrderStatusGroups, +) def annotate_in_production_quantity(reference: str = '') -> QuerySet: @@ -274,6 +278,40 @@ def annotate_sales_order_allocations(reference: str = '', location=None) -> Quer ) +def annotate_transfer_order_allocations(reference: str = '', location=None) -> QuerySet: + """Annotate the total quantity of each part allocated to transfer orders. + + - This function calculates the total part quantity allocated to open transfer orders" + - Finds all transfer order allocations for each part (using the provided filter) + - Aggregates the 'allocated quantity' for each relevant transfer order allocation item + + Arguments: + reference: The relationship reference of the part from the current model + location: If provided, only allocated stock items from this location are considered + """ + # Order filter only returns open orders + order_filter = Q(line__order__status__in=TransferOrderStatusGroups.OPEN) + + if location is not None: + # Filter by location (including any child locations) + + order_filter &= Q( + item__location__tree_id=location.tree_id, + item__location__lft__gte=location.lft, + item__location__rght__lte=location.rght, + item__location__level__gte=location.level, + ) + + return Coalesce( + SubquerySum( + f'{reference}stock_items__transfer_order_allocations__quantity', + filter=order_filter, + ), + Decimal(0), + output_field=models.DecimalField(), + ) + + def variant_stock_query(reference: str = '', filter: Optional[Q] = None) -> QuerySet: """Create a queryset to retrieve all stock items for variant parts under the specified part. diff --git a/src/backend/InvenTree/part/fixtures/bom.yaml b/src/backend/InvenTree/part/fixtures/bom.yaml index e3763eb41f..0907593477 100644 --- a/src/backend/InvenTree/part/fixtures/bom.yaml +++ b/src/backend/InvenTree/part/fixtures/bom.yaml @@ -7,6 +7,7 @@ part: 100 sub_part: 1 quantity: 10 + raw_amount: '10' allow_variants: True # 40 x R_2K2_0805 @@ -16,6 +17,7 @@ part: 100 sub_part: 3 quantity: 40 + raw_amount: '40' # 25 x C_22N_0805 - model: part.bomitem @@ -24,6 +26,7 @@ part: 100 sub_part: 5 quantity: 25 + raw_amount: '25' reference: ABCDE # 3 x Orphan @@ -33,6 +36,7 @@ part: 100 sub_part: 50 quantity: 3 + raw_amount: '3' reference: VWXYZ - model: part.bomitem @@ -41,6 +45,7 @@ part: 1 sub_part: 5 quantity: 3 + raw_amount: '3' reference: LMNOP # Make "Assembly" from "Bob" @@ -50,6 +55,7 @@ part: 101 sub_part: 100 quantity: 10 + raw_amount: '10' - model: part.bomitemsubstitute pk: 1 diff --git a/src/backend/InvenTree/part/migrations/0145_auto_20251203_1238.py b/src/backend/InvenTree/part/migrations/0145_auto_20251203_1238.py index 0924f9065e..1a8ddea9a8 100644 --- a/src/backend/InvenTree/part/migrations/0145_auto_20251203_1238.py +++ b/src/backend/InvenTree/part/migrations/0145_auto_20251203_1238.py @@ -24,6 +24,7 @@ def update_category_parameters(apps, schema_editor): PartCategoryParameterTemplate.objects.bulk_update( category_parameters_to_update, fields=["template"], + batch_size=250, ) @@ -47,6 +48,7 @@ def reverse_update_category_parameters(apps, schema_editor): PartCategoryParameterTemplate.objects.bulk_update( category_parameters_to_update, fields=["parameter_template"], + batch_size=250, ) diff --git a/src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py b/src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py index 2b6d8d8e7c..995e064556 100644 --- a/src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py +++ b/src/backend/InvenTree/part/migrations/0148_auto_20260427_2233.py @@ -10,9 +10,10 @@ def update_bom_role(apps, schema_editor): we need to update the ruleset to include the correct models. """ - from django.contrib.auth.models import Group from users.ruleset import RuleSetEnum - from users.models import RuleSet + + Group = apps.get_model("auth", "Group") + RuleSet = apps.get_model("users", "RuleSet") # For each existing group, create a new 'bom' ruleset for group in Group.objects.all(): diff --git a/src/backend/InvenTree/part/migrations/0149_bomitem_raw_amount.py b/src/backend/InvenTree/part/migrations/0149_bomitem_raw_amount.py new file mode 100644 index 0000000000..0f61638ae5 --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0149_bomitem_raw_amount.py @@ -0,0 +1,86 @@ +# Generated by Django 5.2.12 on 2026-03-30 10:01 + +from decimal import Decimal + +from django.db import migrations, models + +from InvenTree.helpers import normalize + + +def set_default_raw_amount(apps, schema_editor): + """Initialize the 'raw_amount' field for existing BomItem records.""" + BomItem = apps.get_model("part", "BomItem") + + to_update = [] + updated_count = 0 + + # Run BulkUpdate in batches to avoid memory issues with large datasets + BATCH_SIZE = 100 + + N_BOM_ITEMS = BomItem.objects.count() + + def add_bom_item(item): + nonlocal to_update + nonlocal updated_count + + to_update.append(item) + + if len(to_update) >= BATCH_SIZE: + BomItem.objects.bulk_update(to_update, ["raw_amount"]) + updated_count += len(to_update) + to_update = [] + + for item in BomItem.objects.all(): + item.raw_amount = str(normalize(Decimal(item.quantity))) + add_bom_item(item) + + # Handle any remaining items that were not updated in the loop + if len(to_update) > 0: + BomItem.objects.bulk_update(to_update, ["raw_amount"]) + updated_count += len(to_update) + + assert updated_count == N_BOM_ITEMS, f"Expected to update {N_BOM_ITEMS} BomItem records, but updated {updated_count} records instead." + + assert BomItem.objects.filter(raw_amount="").count() == 0, "There are BomItem records with an empty 'raw_amount' field after migration." + + if updated_count > 0: + print(f"Initialized 'raw_amount' field for {updated_count} BomItem records.") + + +class Migration(migrations.Migration): + """Run a set of data and schema migrations to add a new 'raw_amount' field to the BomItem model. + + 1. Add a new 'raw_amount' field to the BomItem model, which is a CharField that can store a raw amount of sub-part consumed to produce one part. This field can be used to store fractional amounts or amounts with associated units (e.g. '10 hours', '5 kg', etc.). + 2. Run a data migration to initialize the 'raw_amount' field for existing BomItem records, by copying the value from the existing 'quantity' field and converting it to a string. + 3. Mark the 'raw_amount' field as blank=False, now that the quantity values have been copied across + """ + + dependencies = [ + ("part", "0148_auto_20260427_2233"), + ] + + operations = [ + migrations.AddField( + model_name="bomitem", + name="raw_amount", + field=models.CharField( + blank=True, + null=False, + help_text="Amount of sub-part consumed to produce one part", + max_length=25, + verbose_name="Amount", + ), + ), + migrations.RunPython(set_default_raw_amount, reverse_code=migrations.RunPython.noop), + migrations.AlterField( + model_name="bomitem", + name="raw_amount", + field=models.CharField( + blank=False, + null=False, + help_text="Amount of sub-part consumed to produce one part", + max_length=25, + verbose_name="Amount", + ), + ), + ] diff --git a/src/backend/InvenTree/part/migrations/0150_part_maximum_stock.py b/src/backend/InvenTree/part/migrations/0150_part_maximum_stock.py new file mode 100644 index 0000000000..439dc57b69 --- /dev/null +++ b/src/backend/InvenTree/part/migrations/0150_part_maximum_stock.py @@ -0,0 +1,26 @@ +# Generated by Django 5.2.13 on 2026-05-10 06:02 + +import django.core.validators +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("part", "0149_bomitem_raw_amount"), + ] + + operations = [ + migrations.AddField( + model_name="part", + name="maximum_stock", + field=models.DecimalField( + decimal_places=6, + default=0, + help_text="Maximum allowed stock level", + max_digits=19, + validators=[django.core.validators.MinValueValidator(0)], + verbose_name="Maximum Stock", + ), + ), + ] diff --git a/src/backend/InvenTree/part/models.py b/src/backend/InvenTree/part/models.py index c006312851..0548ffbef3 100644 --- a/src/backend/InvenTree/part/models.py +++ b/src/backend/InvenTree/part/models.py @@ -2,14 +2,13 @@ from __future__ import annotations -import decimal import hashlib import inspect import math import os import re from datetime import timedelta -from decimal import Decimal, InvalidOperation +from decimal import ROUND_HALF_UP, Decimal, InvalidOperation from typing import TypedDict, cast from django.conf import settings @@ -61,6 +60,7 @@ from order.status_codes import ( PurchaseOrderStatus, PurchaseOrderStatusGroups, SalesOrderStatusGroups, + TransferOrderStatusGroups, ) from stock import models as StockModels @@ -491,6 +491,7 @@ class Part( default_location: Where the item is normally stored (may be null) default_expiry: The default expiry duration for any StockItem instances of this part minimum_stock: Minimum preferred quantity to keep in stock + maximum_stock: Maximum preferred quantity to keep in stock units: Units of measure for this part (default='pcs') salable: Can this part be sold to customers? assembly: Can this part be build from other parts? @@ -1232,6 +1233,15 @@ class Part( help_text=_('Minimum allowed stock level'), ) + maximum_stock = models.DecimalField( + max_digits=19, + decimal_places=6, + default=0, + validators=[MinValueValidator(0)], + verbose_name=_('Maximum Stock'), + help_text=_('Maximum allowed stock level'), + ) + units = models.CharField( max_length=20, default='', @@ -1759,8 +1769,50 @@ class Part( return query['total'] + def transfer_order_allocations(self, **kwargs): + """Return all transfer-order-allocation objects which allocate this part to a TransferOrder.""" + include_variants = kwargs.get('include_variants', True) + + queryset = OrderModels.TransferOrderAllocation.objects.all() + + if include_variants: + # Include allocations for all variants + variants = self.get_descendants(include_self=True) + queryset = queryset.filter(item__part__in=variants) + else: + # Only look at this part + queryset = queryset.filter(item__part=self) + + # Default behaviour is to only return *pending* allocations + pending = kwargs.get('pending', True) + + if pending is True: + # Look only for 'open' orders + queryset = queryset.filter( + line__order__status__in=TransferOrderStatusGroups.OPEN + ) + elif pending is False: + # Look only for 'closed' orders + queryset = queryset.exclude( + line__order__status__in=TransferOrderStatusGroups.OPEN + ) + + return queryset + + def transfer_order_allocation_count(self, **kwargs): + """Return the total quantity of this part allocated to transfer orders.""" + query = self.transfer_order_allocations(**kwargs).aggregate( + total=Coalesce( + Sum('quantity', output_field=models.DecimalField()), + 0, + output_field=models.DecimalField(), + ) + ) + + return query['total'] + def allocation_count(self, **kwargs): - """Return the total quantity of stock allocated for this part, against both build orders and sales orders.""" + """Return the total quantity of stock allocated for this part, against build orders, sales orders, and transfer orders.""" if self.id is None: # If this instance has not been saved, foreign-key lookups will fail return 0 @@ -1768,6 +1820,8 @@ class Part( return sum([ self.build_order_allocation_count(**kwargs), self.sales_order_allocation_count(**kwargs), + # For now, stock allocated to a transfer order will not impact its availability + # self.transfer_order_allocation_count(**kwargs), ]) def stock_entries( @@ -2042,8 +2096,9 @@ class Part( 'part', 'sub_part' ) - for item in bom_items: - item.validate_hash(valid=valid) + if valid: + for item in bom_items: + item.validate_hash(valid=True) self.bom_validated = valid self.bom_checksum = self.get_bom_hash() if valid else '' @@ -2223,8 +2278,8 @@ class Part( logger.warning('WARNING: BomItem ID %s contains itself in BOM', item.pk) continue - q = decimal.Decimal(quantity) - i = decimal.Decimal(item.quantity) + q = Decimal(quantity) + i = Decimal(item.quantity) prices = item.sub_part.get_price_range( q * i, internal=internal, purchase=purchase @@ -2462,7 +2517,7 @@ class Part( templates.append(template) if len(templates) > 0: - PartTestTemplate.objects.bulk_create(templates) + PartTestTemplate.objects.bulk_create(templates, batch_size=250) @transaction.atomic def copy_category_parameters(self, category: PartCategory): @@ -2504,7 +2559,7 @@ class Part( ) ) - Parameter.objects.bulk_create(parameters) + Parameter.objects.bulk_create(parameters, batch_size=250) def getTestTemplates( self, required=None, include_parent: bool = True, enabled=None @@ -3782,7 +3837,8 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): Attributes: part: Link to the parent part (the part that will be produced) sub_part: Link to the child part (the part that will be consumed) - quantity: Number of 'sub_parts' consumed to produce one 'part' + raw_amount: Raw amount of 'sub_part' consumed to produce one 'part' (can be fractional, or use an associated unit) + quantity: Numerical quantity of 'sub_parts' consumed to produce one 'part' optional: Boolean field describing if this BomItem is optional consumable: Boolean field describing if this BomItem is considered a 'consumable' reference: BOM reference field (e.g. part designators) @@ -3884,6 +3940,61 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): """ return Q(part__in=self.get_valid_parts_for_allocation()) + def set_quantity(self, quantity: Decimal | str | float): + """Update the 'quantity' for this BomItem.""" + self.raw_amount = quantity + self.recalculate_quantity() + + def recalculate_quantity(self): + """Recalculate the 'quantity' field based on the 'raw_amount' field.""" + if self.raw_amount is None or self.raw_amount == '': + self.raw_amount = self.quantity + + # Convert from the "raw amount" to a numerical quantity, using the associated unit (if specified) + try: + quantity = InvenTree.conversion.convert_physical_value( + self.raw_amount, self.sub_part.units, strip_units=False + ) + + if not self.sub_part.units and not InvenTree.conversion.is_dimensionless( + quantity + ): + raise ValidationError({ + 'raw_amount': _('Invalid quantity - no units specified for part') + }) + + allow_zero_qty = get_global_setting('PART_BOM_ALLOW_ZERO_QUANTITY', False) + + if allow_zero_qty: + if float(quantity.magnitude) < 0: + raise ValidationError({ + 'raw_amount': _( + 'Quantity must be greater than or equal to zero' + ) + }) + + else: + if float(quantity.magnitude) <= 0: + raise ValidationError({ + 'raw_amount': _('Quantity must be greater than zero') + }) + + # Normalize the quantity, to maximum 5 decimal places + quantity = Decimal(quantity.magnitude) + + except ValidationError as e: + raise ValidationError({'raw_amount': e.messages}) + + # Ensure that the raw_amount is converted to a Decimal value + # and quantized to a maximum of 5 decimal places (to avoid floating point issues) + try: + self.quantity = Decimal(quantity).quantize( + Decimal('0.00001'), rounding=ROUND_HALF_UP + ) + except InvalidOperation: + msg = _('Invalid quantity provided') + raise ValidationError({'quantity': msg, 'raw_amount': msg}) + def delete(self): """Check if this item can be deleted.""" import part.tasks as part_tasks @@ -3990,7 +4101,15 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): limit_choices_to={'component': True}, ) - # Quantity required + raw_amount = models.CharField( + max_length=25, + verbose_name=_('Amount'), + help_text=_('Amount of sub-part consumed to produce one part'), + blank=False, + null=False, + ) + + # Native quantity required quantity = models.DecimalField( default=1.0, max_digits=15, @@ -4176,10 +4295,8 @@ class BomItem(InvenTree.models.MetadataMixin, InvenTree.models.InvenTreeModel): """ super().clean() - try: - self.quantity = Decimal(self.quantity) - except InvalidOperation: - raise ValidationError({'quantity': _('Must be a valid number')}) + # Recalculate the 'quantity' field based on the 'raw_amount' field + self.recalculate_quantity() try: # Check for circular BOM references diff --git a/src/backend/InvenTree/part/serializers.py b/src/backend/InvenTree/part/serializers.py index eb8746be18..ccbce76492 100644 --- a/src/backend/InvenTree/part/serializers.py +++ b/src/backend/InvenTree/part/serializers.py @@ -1,11 +1,9 @@ """DRF data serializers for Part app.""" -import io import os from decimal import Decimal from django.core.exceptions import ValidationError -from django.core.files.base import ContentFile from django.core.validators import MinValueValidator from django.db import models, transaction from django.db.models import ExpressionWrapper, F, Q @@ -22,9 +20,9 @@ from sql_util.utils import SubqueryCount import common.currency import common.filters -import common.models import common.serializers import company.models +import InvenTree.conversion import InvenTree.helpers import InvenTree.serializers import part.filters as part_filters @@ -56,6 +54,27 @@ from .models import ( logger = structlog.get_logger('inventree') +class CategoryDeleteSerializer(serializers.Serializer): + """Serializer for deleting a PartCategory instance.""" + + class Meta: + """Metaclass options.""" + + fields = ['delete_child_categories', 'delete_parts'] + + delete_child_categories = serializers.BooleanField( + label=_('Delete Subcategories'), + help_text=_('Delete all sub-categories contained within this category'), + required=True, + ) + + delete_parts = serializers.BooleanField( + label=_('Delete Parts'), + help_text=_('Delete all parts contained within this category'), + required=True, + ) + + @register_importer() class CategorySerializer( InvenTree.serializers.FilterableSerializerMixin, @@ -559,7 +578,6 @@ class PartSerializer( InvenTree.serializers.FilterableSerializerMixin, DataImportExportSerializerMixin, InvenTree.serializers.NotesFieldMixin, - InvenTree.serializers.RemoteImageMixin, InvenTree.serializers.InvenTreeTaggitSerializer, InvenTree.serializers.InvenTreeModelSerializer, ): @@ -592,7 +610,6 @@ class PartSerializer( 'description', 'full_name', 'image', - 'remote_image', 'existing_image', 'IPN', 'is_template', @@ -600,6 +617,7 @@ class PartSerializer( 'link', 'locked', 'minimum_stock', + 'maximum_stock', 'name', 'notes', 'parameters', @@ -661,7 +679,7 @@ class PartSerializer( # These fields are only used for the LIST API endpoint for f in self.skip_create_fields(): # Fields required for certain operations, but are not part of the model - if f in ['remote_image', 'existing_image']: + if f in ['existing_image']: continue self.fields.pop(f, None) @@ -717,6 +735,8 @@ class PartSerializer( ordering=part_filters.annotate_on_order_quantity(), in_stock=part_filters.annotate_total_stock(), allocated_to_sales_orders=part_filters.annotate_sales_order_allocations(), + # NOTE: for now, decided that allocations to Transfer Orders don't reduce available stock + # allocated_to_transfer_orders=part_filters.annotate_transfer_order_allocations(), allocated_to_build_orders=part_filters.annotate_build_order_allocations(), ) @@ -741,6 +761,8 @@ class PartSerializer( ExpressionWrapper( F('total_in_stock') - F('allocated_to_sales_orders') + # NOTE: for now, decided that allocations to Transfer Orders don't reduce available stock + # - F('allocated_to_transfer_orders'), - F('allocated_to_build_orders'), output_field=models.DecimalField(), ), @@ -750,6 +772,8 @@ class PartSerializer( ) # Annotate with the total 'required for builds' quantity + # NOTE: for now, we don't consider transfer orders for required quantities + # and they are assumed to operate on stock that already exists. queryset = queryset.annotate( required_for_build_orders=part_filters.annotate_build_order_requirements(), required_for_sales_orders=part_filters.annotate_sales_order_requirements(), @@ -901,6 +925,10 @@ class PartSerializer( required=False, label=_('Minimum Stock'), default=0 ) + maximum_stock = serializers.FloatField( + required=False, label=_('Maximum Stock'), default=0 + ) + image = InvenTree.serializers.InvenTreeImageSerializerField( required=False, allow_null=True ) @@ -1103,6 +1131,7 @@ class PartSerializer( part = self.instance data = self.validated_data + # TODO: Remove the existing_image field entirely! existing_image = data.pop('existing_image', None) if existing_image: @@ -1111,19 +1140,6 @@ class PartSerializer( part.image = img_path part.save() - # Check if an image was downloaded from a remote URL - remote_img = getattr(self, 'remote_image_file', None) - - if remote_img and part: - fmt = remote_img.format or 'PNG' - buffer = io.BytesIO() - remote_img.save(buffer, format=fmt) - - # Construct a simplified name for the image - filename = f'part_{part.pk}_image.{fmt.lower()}' - - part.image.save(filename, ContentFile(buffer.getvalue())) - return self.instance @@ -1642,7 +1658,7 @@ class BomItemSerializer( ): """Serializer for BomItem object.""" - import_exclude_fields = ['validated', 'substitutes'] + import_exclude_fields = ['quantity', 'validated', 'substitutes'] export_exclude_fields = ['substitutes'] @@ -1660,6 +1676,7 @@ class BomItemSerializer( 'part', 'sub_part', 'reference', + 'raw_amount', 'quantity', 'allow_variants', 'inherited', @@ -1694,7 +1711,13 @@ class BomItemSerializer( 'category_detail', ] - quantity = InvenTree.serializers.InvenTreeDecimalField(required=True) + raw_amount = serializers.CharField( + label=_('Amount'), + help_text=_('Amount required for this item (can include units)'), + required=False, + ) + + quantity = InvenTree.serializers.InvenTreeDecimalField(required=False) setup_quantity = InvenTree.serializers.InvenTreeDecimalField(required=False) @@ -1704,25 +1727,6 @@ class BomItemSerializer( required=False, allow_null=True ) - def validate_quantity(self, quantity): - """Perform validation for the BomItem quantity field.""" - allow_zero_qty = common.models.InvenTreeSetting.get_setting( - 'PART_BOM_ALLOW_ZERO_QUANTITY', False - ) - - if allow_zero_qty: - if quantity < 0: - raise serializers.ValidationError( - _('Quantity must be greater than or equal to zero') - ) - else: - if quantity <= 0: - raise serializers.ValidationError( - _('Quantity must be greater than zero') - ) - - return quantity - part = serializers.PrimaryKeyRelatedField( queryset=Part.objects.filter(assembly=True), label=_('Assembly'), @@ -1864,6 +1868,27 @@ class BomItemSerializer( external_stock = serializers.FloatField(read_only=True, allow_null=True) + def validate(self, data): + """Validate the supplied data. + + Here, for legacy support, we intercept the 'quantity' field + (if the 'raw_amount' field is not provided) + """ + qty = data.pop('quantity', None) + + if 'raw_amount' not in data and qty is not None: + data['raw_amount'] = qty + + # Check the raw_amount field is valid (this will raise a ValidationError if not) + if raw_amount := data.get('raw_amount', None): + try: + # Check that the value is acceptable to the unit registry + InvenTree.conversion.convert_value(raw_amount) + except Exception: + raise ValidationError({'raw_amount': _('Invalid quantity format')}) + + return super().validate(data) + @staticmethod def annotate_queryset(queryset): """Annotate the BomItem queryset with extra information. @@ -1888,6 +1913,7 @@ class BomItemSerializer( 'sub_part__stock_items', 'sub_part__stock_items__allocations', 'sub_part__stock_items__sales_order_allocations', + 'sub_part__stock_items__transfer_order_allocations', ) # Annotate with the 'total pricing' information based on unit pricing and quantity diff --git a/src/backend/InvenTree/part/stocktake.py b/src/backend/InvenTree/part/stocktake.py index 40bc857afd..a7b971680a 100644 --- a/src/backend/InvenTree/part/stocktake.py +++ b/src/backend/InvenTree/part/stocktake.py @@ -208,7 +208,7 @@ def perform_stocktake( if generate_entry: # Bulk-create PartStocktake entries - part_models.PartStocktake.objects.bulk_create(history_entries) + part_models.PartStocktake.objects.bulk_create(history_entries, batch_size=250) if report_output: # Save report data, and mark as complete diff --git a/src/backend/InvenTree/part/test_api.py b/src/backend/InvenTree/part/test_api.py index 1ba1caad90..011c700884 100644 --- a/src/backend/InvenTree/part/test_api.py +++ b/src/backend/InvenTree/part/test_api.py @@ -3,7 +3,6 @@ import os from datetime import datetime from decimal import Decimal -from enum import IntEnum from random import randint from django.core.exceptions import ValidationError @@ -331,116 +330,94 @@ class PartCategoryAPITest(InvenTreeAPITestCase): def test_category_delete(self): """Test category deletion with different parameters.""" - - class Target(IntEnum): - move_subcategories_to_parent_move_parts_to_parent = (0,) - move_subcategories_to_parent_delete_parts = (1,) - delete_subcategories_move_parts_to_parent = (2,) - delete_subcategories_delete_parts = (3,) - - for i in range(4): - delete_child_categories: bool = False - delete_parts: bool = False - - if i in ( - Target.move_subcategories_to_parent_delete_parts, - Target.delete_subcategories_delete_parts, - ): - delete_parts = True - if i in ( - Target.delete_subcategories_move_parts_to_parent, - Target.delete_subcategories_delete_parts, - ): - delete_child_categories = True - - # Create a parent category - parent_category = PartCategory.objects.create( - name='Parent category', - description='This is the parent category where the child categories and parts are moved to', - parent=None, - ) - - category_count_before = PartCategory.objects.count() - part_count_before = Part.objects.count() - - # Create a category to delete - cat_to_delete = PartCategory.objects.create( - name='Category to delete', - description='This is the category to be deleted', - parent=parent_category, - ) - - url = reverse('api-part-category-detail', kwargs={'pk': cat_to_delete.id}) - - parts = [] - # Create parts in the category to be deleted - for jj in range(3): - parts.append( - Part.objects.create( - name=f'Part xyz {i}_{jj}', - description='Child part of the deleted category', - category=cat_to_delete, - ) + for delete_child_categories in [False, True]: + for delete_parts in [False, True]: + # Create a parent category + parent_category = PartCategory.objects.create( + name='Parent category', + description='This is the parent category where the child categories and parts are moved to', + parent=None, ) - child_categories = [] - child_categories_parts = [] - # Create child categories under the category to be deleted - for ii in range(3): - child = PartCategory.objects.create( - name=f'Child parent_cat {i}_{ii}', - description='A child category of the deleted category', - parent=cat_to_delete, - ) - child_categories.append(child) + category_count_before = PartCategory.objects.count() - # Create parts in the child categories + # Create a category to delete + cat_to_delete = PartCategory.objects.create( + name='Category to delete', + description='This is the category to be deleted', + parent=parent_category, + ) + + url = reverse( + 'api-part-category-detail', kwargs={'pk': cat_to_delete.id} + ) + + parts = [] + # Create parts in the category to be deleted for jj in range(3): - child_categories_parts.append( + parts.append( Part.objects.create( - name=f'Part xyz {i}_{jj}_{ii}', - description='Child part in the child category of the deleted category', - category=child, + name=f'Part {"A" if delete_child_categories else "B"}{"C" if delete_parts else "D"}-{jj}', + description='Child part of the deleted category', + category=cat_to_delete, ) ) - # Delete the created category (sub categories and their parts will be moved under the parent) - params = {} - if delete_parts: - params['delete_parts'] = '1' - if delete_child_categories: - params['delete_child_categories'] = '1' - self.delete(url, params, expected_code=204) - - if delete_parts: - if i == Target.delete_subcategories_delete_parts: - # Check if all parts deleted - self.assertEqual(Part.objects.count(), part_count_before) - elif i == Target.move_subcategories_to_parent_delete_parts: - # Check if all parts deleted - self.assertEqual( - Part.objects.count(), - part_count_before + len(child_categories_parts), + child_categories = [] + child_categories_parts = [] + # Create child categories under the category to be deleted + for ii in range(3): + child = PartCategory.objects.create( + name=f'Child parent_cat {ii}', + description='A child category of the deleted category', + parent=cat_to_delete, ) - else: - # parts moved to the parent category - for part in parts: - part.refresh_from_db() - self.assertEqual(part.category, parent_category) + child_categories.append(child) - if delete_child_categories: - for part in child_categories_parts: + # Create parts in the child categories + for jj in range(3): + child_categories_parts.append( + Part.objects.create( + name=f'Part xyz {jj}_{ii}-{"E" if delete_child_categories else "F"}{"G" if delete_parts else "H"}', + description='Child part in the child category of the deleted category', + category=child, + ) + ) + + # Delete the created category (sub categories and their parts will be moved under the parent) + params = { + 'delete_parts': delete_parts, + 'delete_child_categories': delete_child_categories, + } + + self.delete(url, params, expected_code=204) + + if delete_parts: + # Check if all parts deleted + for p in parts: + with self.assertRaises(Part.DoesNotExist): + p.refresh_from_db() + else: + # parts moved to the parent category + for part in parts: part.refresh_from_db() self.assertEqual(part.category, parent_category) - if delete_child_categories: - # Check if all categories are deleted - self.assertEqual(PartCategory.objects.count(), category_count_before) - else: - # Check if all subcategories to parent moved to parent and all parts deleted - for child in child_categories: - child.refresh_from_db() - self.assertEqual(child.parent, parent_category) + if delete_child_categories: + for part in child_categories_parts: + part.refresh_from_db() + self.assertEqual(part.category, parent_category) + + if delete_child_categories: + # Check if all categories are deleted + self.assertEqual( + PartCategory.objects.count(), category_count_before + ) + else: + # Check if all subcategories to parent moved to parent and all parts deleted + for child in child_categories: + child.refresh_from_db() + self.assertEqual(child.parent, parent_category) def test_structural(self): """Test the effectiveness of structural categories. @@ -1005,7 +982,9 @@ class PartAPITest(PartAPITestBase): sub_part.refresh_from_db() # Link the sub part to the assembly via a BOM - bom_item = BomItem.objects.create(part=assembly, sub_part=sub_part, quantity=10) + bom_item = BomItem.objects.create( + part=assembly, sub_part=sub_part, raw_amount='10', quantity=10 + ) filters = {'active': True, 'assembly': True, 'bom_valid': True} @@ -1023,14 +1002,14 @@ class PartAPITest(PartAPITestBase): self.assertEqual(response.data[0]['pk'], assembly.pk) # Adjust the 'quantity' of the BOM item to make it invalid - bom_item.quantity = 15 + bom_item.set_quantity(15) bom_item.save() response = self.get(url, filters) self.assertEqual(len(response.data), 0) # Adjust it back again - should be valid again - bom_item.quantity = 10 + bom_item.set_quantity(10) bom_item.save() response = self.get(url, filters) @@ -1054,7 +1033,7 @@ class PartAPITest(PartAPITestBase): self.assertIsNotNone(data['bom_checked_date']) # Now, let's try to validate and invalidate the assembly BOM via the API - bom_item.quantity = 99 + bom_item.raw_amount = ' 99' bom_item.save() data = self.get(bom_url, expected_code=200).data @@ -2647,6 +2626,58 @@ class PartAPIAggregationTest(InvenTreeAPITestCase): self.assertEqual(data['building'], 55) self.assertEqual(data['scheduled_to_build'], 32) + def test_low_stock(self): + """Test the 'low_stock' filter.""" + part = Part.objects.create( + name='Low Stock Part', + description='A part which is low on stock', + category=PartCategory.objects.get(pk=1), + minimum_stock=10, + ) + + response = self.get( + reverse('api-part-list'), {'low_stock': True}, expected_code=200 + ) + + self.assertEqual(len(response.data), 1) + self.assertEqual(response.data[0]['pk'], part.pk) + + StockItem.objects.create(part=part, quantity=20) + + response = self.get( + reverse('api-part-list'), {'low_stock': True}, expected_code=200 + ) + + # No results should be returned, as the part is no longer low on stock + self.assertEqual(len(response.data), 0) + + def test_high_stock(self): + """Test the 'high_stock' filter.""" + part = Part.objects.create( + name='High Stock Part', + description='A part which is high on stock', + category=PartCategory.objects.get(pk=1), + ) + + StockItem.objects.create(part=part, quantity=100) + + response = self.get( + reverse('api-part-list'), {'high_stock': True}, expected_code=200 + ) + + self.assertEqual(len(response.data), 0) + + # Set a "maximum stock" threshold for the part + part.maximum_stock = 50 + part.save() + + response = self.get( + reverse('api-part-list'), {'high_stock': True}, expected_code=200 + ) + + self.assertEqual(len(response.data), 1) + self.assertEqual(response.data[0]['pk'], part.pk) + class BomItemTest(InvenTreeAPITestCase): """Unit tests for the BomItem API.""" @@ -2796,6 +2827,7 @@ class BomItemTest(InvenTreeAPITestCase): 'rounding_multiple', 'pk', 'part', + 'raw_amount', 'quantity', 'reference', 'sub_part', @@ -2821,6 +2853,7 @@ class BomItemTest(InvenTreeAPITestCase): # Increase the quantity data = response.data + del data['raw_amount'] data['quantity'] = 57 data['note'] = 'Added a note' @@ -2829,6 +2862,14 @@ class BomItemTest(InvenTreeAPITestCase): self.assertEqual(int(float(response.data['quantity'])), 57) self.assertEqual(response.data['note'], 'Added a note') + # Provide a conflicting "raw_amount" and "quantity" field + data['raw_amount'] = ' 123.45 ' + data['quantity'] = 99.99 + response = self.patch(url, data, expected_code=200) + + self.assertEqual(response.data['raw_amount'], '123.45') + self.assertAlmostEqual(response.data['quantity'], 123.45, places=2) + def test_output_options(self): """Test that various output options work as expected.""" self.run_output_test( @@ -2846,14 +2887,57 @@ class BomItemTest(InvenTreeAPITestCase): """Test that we can create a new BomItem via the API.""" url = reverse('api-bom-list') + # Test with legacy format (only the 'quantity' field is supplied) data = {'part': 100, 'sub_part': 4, 'quantity': 777} + response = self.post(url, data, expected_code=201) + self.assertEqual(response.data['raw_amount'], '777') + self.assertEqual(response.data['quantity'], 777) - self.post(url, data, expected_code=201) + # Test with the 'modern' format (accepts a raw_amount field) + data = {'part': 100, 'sub_part': 4, 'raw_amount': '123.45'} + response = self.post(url, data, expected_code=201) + self.assertEqual(response.data['raw_amount'], '123.45') + self.assertEqual(response.data['quantity'], 123.45) + + # First, let's assign some units to the sub_part + sub_part = Part.objects.get(pk=4) + sub_part.units = 'metres' + sub_part.save() + + # Test with a bunch of invalid 'raw_amount' values + for value in [ + '3 ampere', + '17 degrees', + '1 kg', + '-4', + 'yak', + '*****', + '$$$$$', + '', + ]: + data = {'part': 100, 'sub_part': 4, 'raw_amount': value} + self.post(url, data, expected_code=400) + + # Test with a bunch of valid 'raw_amount' values + test_values = [ + (5, 5), + ('3.14cm', 0.0314), + ('10 metres ', 10), + ('2 inches', 0.0508), + ('1/7', 0.142857), + ('14 ', 14), + ] + + for raw_amount, quantity in test_values: + data = {'part': 100, 'sub_part': 4, 'raw_amount': raw_amount} + response = self.post(url, data, expected_code=201) + self.assertEqual(response.data['raw_amount'], str(raw_amount).strip()) + self.assertAlmostEqual(response.data['quantity'], quantity, places=4) # Now try to create a BomItem which references itself - data['part'] = 100 - data['sub_part'] = 100 - self.post(url, data, expected_code=400) + data = {'part': 100, 'sub_part': 100, 'quantity': 1} + response = self.post(url, data, expected_code=400) + self.assertIn('(recursive)', str(response.data)) def test_variants(self): """Tests for BomItem use with variants.""" diff --git a/src/backend/InvenTree/part/test_bom_item.py b/src/backend/InvenTree/part/test_bom_item.py index d2e8d91b91..1e9a686a77 100644 --- a/src/backend/InvenTree/part/test_bom_item.py +++ b/src/backend/InvenTree/part/test_bom_item.py @@ -438,7 +438,7 @@ class BomItemTest(TestCase): # Editing the BOM item should also invalidate the bom_validated cache validate() - bom_item.quantity = 2 + bom_item.set_quantity(2) bom_item.save() check(valid=False) diff --git a/src/backend/InvenTree/part/test_category.py b/src/backend/InvenTree/part/test_category.py index dca64697da..6d3c7f7578 100644 --- a/src/backend/InvenTree/part/test_category.py +++ b/src/backend/InvenTree/part/test_category.py @@ -43,8 +43,8 @@ class CategoryTest(TestCase): self.assertTrue(self.electronics.has_children) self.assertTrue(self.mechanical.has_children) - self.assertEqual(len(self.electronics.children.all()), 3) - self.assertEqual(len(self.mechanical.children.all()), 1) + self.assertEqual(self.electronics.children.count(), 3) + self.assertEqual(self.mechanical.children.count(), 1) def test_unique_children(self): """Test the 'unique_children' functionality.""" diff --git a/src/backend/InvenTree/plugin/api.py b/src/backend/InvenTree/plugin/api.py index 9093d6e7f4..400f0004df 100644 --- a/src/backend/InvenTree/plugin/api.py +++ b/src/backend/InvenTree/plugin/api.py @@ -317,13 +317,13 @@ def check_plugin( plugin_slug (str): Slug for plugin. plugin_pk (int): Primary key for plugin. + Returns: + InvenTreePlugin: The config object for the provided plugin. + Raises: NotFound: If plugin is not installed NotFound: If plugin is not correctly registered NotFound: If plugin is not active - - Returns: - InvenTreePlugin: The config object for the provided plugin. """ # Make sure that a plugin reference is specified if plugin_slug is None and plugin_pk is None: diff --git a/src/backend/InvenTree/plugin/base/integration/ReportMixin.py b/src/backend/InvenTree/plugin/base/integration/ReportMixin.py index 77ee7e3dd2..d28ed395d2 100644 --- a/src/backend/InvenTree/plugin/base/integration/ReportMixin.py +++ b/src/backend/InvenTree/plugin/base/integration/ReportMixin.py @@ -24,7 +24,7 @@ class ReportMixin: super().__init__() self.add_mixin(PluginMixinEnum.REPORT, True, __class__) - def add_report_context(self, report_instance, model_instance, request, context): + def add_report_context(self, report_instance, model_instance, user, context): """Add extra context to the provided report instance. By default, this method does nothing. @@ -32,11 +32,11 @@ class ReportMixin: Args: report_instance: The report instance to add context to model_instance: The model instance which initiated the report generation - request: The request object which initiated the report generation + user: The user to associate with the generated report context: The context dictionary to add to """ - def add_label_context(self, label_instance, model_instance, request, context): + def add_label_context(self, label_instance, model_instance, user, context): """Add extra context to the provided label instance. By default, this method does nothing. @@ -44,18 +44,18 @@ class ReportMixin: Args: label_instance: The label instance to add context to model_instance: The model instance which initiated the label generation - request: The request object which initiated the label generation + user: The user to associate with the generated label context: The context dictionary to add to """ - def report_callback(self, template, instance, report, request, **kwargs): + def report_callback(self, template, instance, report, user, **kwargs): """Callback function called after a report is generated. Arguments: template: The ReportTemplate model instance: The instance of the target model report: The generated report object - request: The initiating request object + user: The user to associate with the generated report The default implementation does nothing. """ diff --git a/src/backend/InvenTree/plugin/base/label/mixins.py b/src/backend/InvenTree/plugin/base/label/mixins.py index deab3bf097..78182e343c 100644 --- a/src/backend/InvenTree/plugin/base/label/mixins.py +++ b/src/backend/InvenTree/plugin/base/label/mixins.py @@ -38,41 +38,51 @@ class LabelPrintingMixin: BLOCKING_PRINT = True - def render_to_pdf(self, label: LabelTemplate, instance, request, **kwargs): + def render_to_pdf( + self, label: LabelTemplate, instance, request, user=None, **kwargs + ): """Render this label to PDF format. Arguments: label: The LabelTemplate object to render against instance: The model instance to render - request: The HTTP request object which triggered this print job + request: The HTTP request object which triggered this print job (optional, may be None) + user: The user who triggered this print job (optional, may be None) """ try: - return label.render(instance, request) + return label.render(instance, request=request, user=user) except Exception: log_error('render_to_pdf', plugin=self.slug) raise ValidationError(_('Error rendering label to PDF')) - def render_to_html(self, label: LabelTemplate, instance, request, **kwargs): + def render_to_html( + self, label: LabelTemplate, instance, request, user=None, **kwargs + ): """Render this label to HTML format. Arguments: label: The LabelTemplate object to render against instance: The model instance to render - request: The HTTP request object which triggered this print job + request: The HTTP request object which triggered this print job (optional, may be None) + user: The user who triggered this print job (optional, may be None) """ try: - return label.render_as_string(instance, request) + return label.render_as_string(instance, request=request, user=user) except Exception: log_error('render_to_html', plugin=self.slug) raise ValidationError(_('Error rendering label to HTML')) - def render_to_png(self, label: LabelTemplate, instance, request=None, **kwargs): + def render_to_png( + self, label: LabelTemplate, instance, request=None, user=None, **kwargs + ): """Render this label to PNG format. Arguments: label: The LabelTemplate object to render against instance: The model instance to render - request: The HTTP request object which triggered this print job + request: The HTTP request object which triggered this print job (optional, may be None) + user: The user who triggered this print job (optional, may be None) + Keyword Arguments: pdf_data: The raw PDF data of the rendered label (if already rendered) dpi: The DPI to use for the PNG rendering @@ -85,7 +95,7 @@ class LabelPrintingMixin: pdf_data = kwargs.get('pdf_data') if not pdf_data: - pdf_data = self.render_to_pdf(label, instance, request, **kwargs) + pdf_data = self.render_to_pdf(label, instance, request, user=user, **kwargs) pdf2image_kwargs = { 'dpi': kwargs.get('dpi', InvenTreeSetting.get_setting('LABEL_DPI', 300)), @@ -128,10 +138,12 @@ class LabelPrintingMixin: The default implementation simply calls print_label() for each label, producing multiple single label output "jobs" but this can be overridden by the particular plugin. """ - try: - user = request.user - except AttributeError: - user = None + # Extract user information, in decreasing order of preference + user = ( + kwargs.pop('user', None) + or getattr(request, 'user', None) + or getattr(output, 'user', None) + ) # Initial state for the output print job output.progress = 0 @@ -145,11 +157,11 @@ class LabelPrintingMixin: # Generate a label output for each provided item for item in items: - context = label.get_context(item, request) + context = label.get_context(item, request, user=user) filename = label.generate_filename(context) - pdf_data = self.render_to_pdf(label, item, request, **kwargs) + pdf_data = self.render_to_pdf(label, item, request, user=user, **kwargs) png_file = self.render_to_png( - label, item, request, pdf_data=pdf_data, **kwargs + label, item, request, pdf_data=pdf_data, user=user, **kwargs ) print_args = { diff --git a/src/backend/InvenTree/plugin/base/ui/mixins.py b/src/backend/InvenTree/plugin/base/ui/mixins.py index 4ab84ef6ca..9aa4a67edd 100644 --- a/src/backend/InvenTree/plugin/base/ui/mixins.py +++ b/src/backend/InvenTree/plugin/base/ui/mixins.py @@ -21,6 +21,7 @@ FeatureType = Literal[ 'template_editor', # Custom template editor 'template_preview', # Custom template preview 'navigation', # Custom navigation items + 'primary_action', # Custom primary action buttons ] @@ -106,6 +107,7 @@ class UserInterfaceMixin: 'panel': self.get_ui_panels, 'template_editor': self.get_ui_template_editors, 'template_preview': self.get_ui_template_previews, + 'primary_action': self.get_ui_primary_actions, } if feature_type in feature_map: @@ -203,3 +205,29 @@ class UserInterfaceMixin: """ # Default implementation returns an empty list return [] + + def get_ui_primary_actions( + self, request: Request, context: dict, **kwargs + ) -> list[UIFeature]: + """Return a list of custom primary action buttons to be injected into the UI. + + Args: + request: HTTPRequest object (including user information) + context: Additional context data provided by the UI (query parameters) + + Returns: + list: A list of custom primary action buttons to be injected into the UI + """ + # Sample code to render conditional primary action button based on context + # items = [] + # if self.my_assert_function(context): + # items.append({ + # 'key': 'sample-primary-action', + # 'title': 'Sample Primary Action', + # 'icon': 'ti:plus:outline', + # 'options': {'url': '/core/sample-primary-action/', 'color': 'orange'}, + # }) + # return items + + # Default implementation returns an empty list + return [] diff --git a/src/backend/InvenTree/plugin/base/ui/tests.py b/src/backend/InvenTree/plugin/base/ui/tests.py index e38e64a856..0a4a94977b 100644 --- a/src/backend/InvenTree/plugin/base/ui/tests.py +++ b/src/backend/InvenTree/plugin/base/ui/tests.py @@ -233,3 +233,13 @@ class UserInterfaceMixinTests(InvenTreeAPITestCase): self.assertEqual(response.data[0]['plugin_name'], 'sampleui') self.assertEqual(response.data[0]['key'], 'sample-nav-item') self.assertEqual(response.data[0]['title'], 'Sample Nav Item') + + def test_ui_primary_actions(self): + """Test that the sample UI plugin provides custom primary actions.""" + response = self.get( + reverse('api-plugin-ui-feature-list', kwargs={'feature': 'primary_action'}) + ) + self.assertEqual(1, len(response.data)) + self.assertEqual(response.data[0]['plugin_name'], 'sampleui') + self.assertEqual(response.data[0]['key'], 'sample-primary-action') + self.assertEqual(response.data[0]['title'], 'Sample Primary Action') diff --git a/src/backend/InvenTree/plugin/builtin/integration/core_notifications.py b/src/backend/InvenTree/plugin/builtin/integration/core_notifications.py index a35df5739d..2f7d7b11ca 100644 --- a/src/backend/InvenTree/plugin/builtin/integration/core_notifications.py +++ b/src/backend/InvenTree/plugin/builtin/integration/core_notifications.py @@ -55,7 +55,7 @@ class InvenTreeUINotifications(NotificationMixin, InvenTreePlugin): ) ) - NotificationMessage.objects.bulk_create(entries) + NotificationMessage.objects.bulk_create(entries, batch_size=250) return True diff --git a/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py b/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py index 28158952a7..7654043ebd 100644 --- a/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py +++ b/src/backend/InvenTree/plugin/builtin/labels/inventree_label.py @@ -20,6 +20,7 @@ class InvenTreeLabelPlugin(LabelPrintingMixin, SettingsMixin, InvenTreePlugin): """ NAME = 'InvenTreeLabel' + SLUG = 'inventreelabel' TITLE = _('InvenTree PDF label printer') DESCRIPTION = _('Provides native support for printing PDF labels') VERSION = '1.1.0' diff --git a/src/backend/InvenTree/plugin/samples/integration/test_validation_sample.py b/src/backend/InvenTree/plugin/samples/integration/test_validation_sample.py index b0883344db..f6f7f0fbb1 100644 --- a/src/backend/InvenTree/plugin/samples/integration/test_validation_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/test_validation_sample.py @@ -49,7 +49,7 @@ class SampleValidatorPluginTest(InvenTreeAPITestCase, InvenTreeTestCase): self.assembly.refresh_from_db() self.bom_item = part.models.BomItem.objects.create( - part=self.assembly, sub_part=self.part, quantity=1 + part=self.assembly, sub_part=self.part, raw_amount=1, quantity=1 ) self.enable_plugin(False) @@ -75,14 +75,14 @@ class SampleValidatorPluginTest(InvenTreeAPITestCase, InvenTreeTestCase): plg.set_setting('BOM_ITEM_INTEGER', True) - self.bom_item.quantity = 3.14159 + self.bom_item.raw_amount = 3.14159 with self.assertRaises(ValidationError): self.bom_item.save() # Now, disable the plugin setting plg.set_setting('BOM_ITEM_INTEGER', False) - self.bom_item.quantity = 3.14159 + self.bom_item.set_quantity(3.14159) self.bom_item.save() # Test that we *cannot* set a part description to a shorter value diff --git a/src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py b/src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py index 70c47f220a..09bdbb7f37 100644 --- a/src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py +++ b/src/backend/InvenTree/plugin/samples/integration/user_interface_sample.py @@ -226,6 +226,17 @@ class SampleUserInterfacePlugin(SettingsMixin, UserInterfaceMixin, InvenTreePlug } ] + def get_ui_primary_actions(self, request, context, **kwargs): + """Return a list of custom primary action buttons.""" + return [ + { + 'key': 'sample-primary-action', + 'title': 'Sample Primary Action', + 'icon': 'ti:plus:outline', + 'options': {'url': '/core/sample-primary-action/', 'color': 'orange'}, + } + ] + def get_admin_context(self) -> dict: """Return custom context data which can be rendered in the admin panel.""" return {'apple': 'banana', 'foo': 'bar', 'hello': 'world'} diff --git a/src/backend/InvenTree/report/api.py b/src/backend/InvenTree/report/api.py index 6eebee27f6..44ff732da4 100644 --- a/src/backend/InvenTree/report/api.py +++ b/src/backend/InvenTree/report/api.py @@ -215,6 +215,7 @@ class LabelPrint(GenericAPIView): template.pk, [item.pk for item in items_to_print], output.pk, + user.pk if user else None, plugin.slug, options=(plugin_serializer.data if plugin_serializer else {}), ) @@ -297,7 +298,13 @@ class ReportPrint(GenericAPIView): item_ids = [item.pk for item in items_to_print] # Offload the task to the background worker - offload_task(report.tasks.print_reports, template.pk, item_ids, output.pk) + offload_task( + report.tasks.print_reports, + template.pk, + item_ids, + output.pk, + user.pk if user else None, + ) output.refresh_from_db() diff --git a/src/backend/InvenTree/report/apps.py b/src/backend/InvenTree/report/apps.py index 40de211e32..e72ea19145 100644 --- a/src/backend/InvenTree/report/apps.py +++ b/src/backend/InvenTree/report/apps.py @@ -229,6 +229,13 @@ class ReportConfig(AppConfig): 'model_type': 'returnorder', 'filename_pattern': 'ReturnOrder-{{ reference }}.pdf', }, + { + 'file': 'inventree_transfer_order_report.html', + 'name': 'InvenTree Transfer Order', + 'description': 'Sample transfer order report', + 'model_type': 'transferorder', + 'filename_pattern': 'TransferOrder-{{ reference }}.pdf', + }, { 'file': 'inventree_test_report.html', 'name': 'InvenTree Test Report', diff --git a/src/backend/InvenTree/report/models.py b/src/backend/InvenTree/report/models.py index 1593ae03f9..cae928bdf4 100644 --- a/src/backend/InvenTree/report/models.py +++ b/src/backend/InvenTree/report/models.py @@ -148,7 +148,7 @@ class BaseContextExtension(TypedDict): template_description: Description of the report template template_name: Name of the report template template_revision: Revision of the report template - user: User who made the request to render the template + user: User who is creating the report (if available) """ base_url: str @@ -244,37 +244,39 @@ class ReportTemplateBase( def generate_filename(self, context, **kwargs) -> str: """Generate a filename for this report.""" template_string = Template(self.filename_pattern) - return template_string.render(Context(context)) - def render_as_string(self, instance, request=None, context=None, **kwargs) -> str: + def render_as_string( + self, instance: models.Model, context: Optional[dict] = None, **kwargs + ) -> str: """Render the report to a HTML string. Arguments: instance: The model instance to render against - request: A HTTPRequest object (optional) context: Django template language contexts (optional) Returns: str: HTML string """ if context is None: - context = self.get_context(instance, request, **kwargs) + context = self.get_context(instance, **kwargs) - return render_to_string(self.template_name, context, request) + return render_to_string(self.template_name, context) - def render(self, instance, request=None, context=None, **kwargs) -> bytes: + def render( + self, instance: models.Model, context: Optional[dict] = None, **kwargs + ) -> bytes: """Render the template to a PDF file. Arguments: instance: The model instance to render against - request: A HTTPRequest object (optional) - context: Django template langaguage contexts (optional) + context: Django template language contexts (optional) + user: The user to associate with the generated report Returns: bytes: PDF data """ - html = self.render_as_string(instance, request, context, **kwargs) + html = self.render_as_string(instance, context=context, **kwargs) pdf = HTML(string=html).write_pdf(pdf_forms=True) return pdf @@ -323,28 +325,28 @@ class ReportTemplateBase( """Return a filter dict which can be applied to the target model.""" return report.validators.validate_filters(self.filters, model=self.get_model()) - def base_context(self, request=None) -> BaseContextExtension: + def base_context(self, **kwargs) -> BaseContextExtension: """Return base context data (available to all templates).""" return { - 'base_url': get_base_url(request=request), + 'base_url': get_base_url(), 'date': InvenTree.helpers.current_date(), 'datetime': InvenTree.helpers.current_time(), 'template': self, 'template_description': self.description, 'template_name': self.name, 'template_revision': self.revision, - 'user': request.user if request else None, + 'user': kwargs.get('user'), } - def get_context(self, instance, request=None, **kwargs): + def get_context(self, instance: models.Model, **kwargs): """Supply context data to the generic template for rendering. Arguments: instance: The model instance we are printing against - request: The request object (optional) + user: The user to associate with the generated report """ # Provide base context information to all templates - base_context = self.base_context(request=request) + base_context = self.base_context(**kwargs) # Add in an context information provided by the model instance itself context = {**base_context, **instance.report_context()} @@ -423,55 +425,77 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): return report_context - def get_context(self, instance, request=None, **kwargs): - """Supply context data to the report template for rendering.""" - base_context = super().get_context(instance, request) + def get_context(self, instance: models.Model, **kwargs): + """Supply context data to the report template for rendering. + + Arguments: + instance: The model instance we are printing against + """ + base_context = super().get_context(instance, **kwargs) report_context: ReportContextExtension = self.get_report_context() context = {**base_context, **report_context} # Pass the context through to the plugin registry for any additional information - context = self.get_plugin_context(instance, request, context) + context = self.get_plugin_context(instance, context, **kwargs) return context - def get_plugin_context(self, instance, request, context): - """Get the context for the plugin.""" + def get_plugin_context(self, instance: models.Model, context: dict, **kwargs): + """Get the context for the plugin. + + Arguments: + instance: The model instance we are printing against + context: The context dictionary to add to + user: The user to associate with the generated report + """ + user = kwargs.get('user') + for plugin in registry.with_mixin(PluginMixinEnum.REPORT): try: - plugin.add_report_context(self, instance, request, context) + plugin.add_report_context(self, instance, user, context) except Exception: InvenTree.exceptions.log_error('add_report_context', plugin=plugin.slug) return context - def handle_attachment(self, instance, report, report_name, request, debug_mode): + def handle_attachment(self, instance, report, report_name, user, debug_mode): """Attach the generated report to the model instance (if required).""" if self.attach_to_model and not debug_mode: instance.create_attachment( attachment=ContentFile(report, report_name), comment=_(f'Report generated from template {self.name}'), - upload_user=request.user - if request and request.user.is_authenticated - else None, + upload_user=user, ) - def notify_plugins(self, instance, report, request): - """Provide generated report to any interested plugins.""" + def notify_plugins(self, instance, report, user): + """Provide generated report to any interested plugins. + + Arguments: + instance: The model instance we are printing against + report: The generated report object + user: The user to associate with the generated report + """ report_plugins = registry.with_mixin(PluginMixinEnum.REPORT) for plugin in report_plugins: try: - plugin.report_callback(self, instance, report, request) + plugin.report_callback(self, instance, report, user) except Exception: InvenTree.exceptions.log_error('report_callback', plugin=plugin.slug) - def print(self, items: list, request=None, output=None, **kwargs) -> DataOutput: + def print( + self, + items: list, + output: Optional[DataOutput] = None, + user: Optional[AbstractUser] = None, + **kwargs, + ) -> DataOutput: """Print reports for a list of items against this template. Arguments: items: A list of items to print reports for (model instance) - output: The DataOutput object to use (if provided) - request: The request object (optional) + output: The DataOutput object to use + user: The user to associate with the generated report Returns: output: The DataOutput object representing the generated report(s) @@ -489,6 +513,9 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): """ logger.info("Printing %s reports against template '%s'", len(items), self.name) + # Extract user information from the provided context + user = user or getattr(output, 'user', None) + outputs = [] debug_mode = get_global_setting('REPORT_DEBUG_MODE', False) @@ -500,9 +527,7 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): if not output: output = DataOutput.objects.create( total=len(items), - user=request.user - if request and request.user and request.user.is_authenticated - else None, + user=user, progress=0, complete=False, output_type=DataOutput.DataOutputTypes.REPORT, @@ -516,13 +541,13 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): try: if self.merge: - base_context = super().base_context(request) + base_context = super().base_context(user=user) report_context = self.get_report_context() item_contexts = [] for instance in items: instance_context = instance.report_context() instance_context = self.get_plugin_context( - instance, request, instance_context + instance, instance_context, user=user ) item_contexts.append(instance_context) @@ -537,9 +562,11 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): try: if debug_mode: - report = self.render_as_string(instance, request, contexts) + report = self.render_as_string( + instance, user=user, context=contexts + ) else: - report = self.render(instance, request, contexts) + report = self.render(instance, user=user, context=contexts) except TemplateDoesNotExist as e: t_name = str(e) or self.template msg = f'Template file {t_name} does not exist' @@ -558,17 +585,15 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): raise ValidationError(f'{msg}: {e!s}') outputs.append(report) - self.handle_attachment( - instance, report, report_name, request, debug_mode - ) - self.notify_plugins(instance, report, request) + self.handle_attachment(instance, report, report_name, user, debug_mode) + self.notify_plugins(instance, report, user) # Update the progress of the report generation output.progress += 1 output.save() else: for instance in items: - context = self.get_context(instance, request) + context = self.get_context(instance, user=user) if report_name is None: report_name = self.generate_filename(context) @@ -576,9 +601,11 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): # Render the report output try: if debug_mode: - report = self.render_as_string(instance, request, None) + report = self.render_as_string( + instance, user=user, context=context + ) else: - report = self.render(instance, request, None) + report = self.render(instance, user=user, context=None) except TemplateDoesNotExist as e: t_name = str(e) or self.template msg = f'Template file {t_name} does not exist' @@ -599,9 +626,10 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): outputs.append(report) self.handle_attachment( - instance, report, report_name, request, debug_mode + instance, report, report_name, user, debug_mode ) - self.notify_plugins(instance, report, request) + + self.notify_plugins(instance, report, user) # Update the progress of the report generation output.progress += 1 @@ -614,7 +642,6 @@ class ReportTemplate(TemplateUploadMixin, ReportTemplateBase): raise ValidationError({ 'error': _('Error generating report'), 'detail': str(exc), - 'path': request.path if request else None, }) if not report_name: @@ -704,9 +731,16 @@ 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) + def get_context(self, instance: models.Model, *args, **kwargs): + """Supply context data to the label template for rendering. + + Arguments: + instance: The model instance we are printing against + """ + user = kwargs.get('user') + + base_context = super().get_context(instance, **kwargs) + label_context: LabelContextExtension = { 'width': self.width, 'height': self.height, @@ -724,7 +758,7 @@ class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): for plugin in plugins: # Let each plugin add its own context data try: - plugin.add_label_context(self, instance, request, context) + plugin.add_label_context(self, instance, user, context) except Exception: InvenTree.exceptions.log_error('add_label_context', plugin=plugin.slug) @@ -734,9 +768,9 @@ class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): self, items: list, plugin: InvenTreePlugin, - output=None, - options=None, - request=None, + output: Optional[DataOutput] = None, + options: Optional[dict] = None, + user: Optional[AbstractUser] = None, **kwargs, ) -> DataOutput: """Print labels for a list of items against this template. @@ -744,9 +778,9 @@ class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): Arguments: items: A list of items to print labels for (model instance) plugin: The plugin to use for label rendering - output: The DataOutput object to use (if provided) + output: The DataOutput object to use options: Additional options for the label printing plugin (optional) - request: The request object (optional) + user: The user to associate with the generated labels Returns: output: The DataOutput object representing the generated label(s) @@ -758,11 +792,11 @@ class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): f"Printing {len(items)} labels against template '{self.name}' using plugin '{plugin.slug}'" ) + user = user or getattr(output, 'user', None) + if not output: output = DataOutput.objects.create( - user=request.user - if request and request.user.is_authenticated - else None, + user=user, total=len(items), progress=0, complete=False, @@ -779,7 +813,9 @@ class LabelTemplate(TemplateUploadMixin, ReportTemplateBase): if hasattr(plugin, 'before_printing'): plugin.before_printing() - plugin.print_labels(self, output, items, request, printing_options=options) + plugin.print_labels( + self, output, items, None, user=user, printing_options=options + ) if hasattr(plugin, 'after_printing'): plugin.after_printing() diff --git a/src/backend/InvenTree/report/tasks.py b/src/backend/InvenTree/report/tasks.py index 0dae66f274..71106f6ccb 100644 --- a/src/backend/InvenTree/report/tasks.py +++ b/src/backend/InvenTree/report/tasks.py @@ -1,5 +1,7 @@ """Background tasks for the report app.""" +from django.contrib.auth import get_user_model + import structlog from opentelemetry import trace @@ -10,13 +12,16 @@ logger = structlog.get_logger('inventree') @tracer.start_as_current_span('print_reports') -def print_reports(template_id: int, item_ids: list[int], output_id: int, **kwargs): +def print_reports( + template_id: int, item_ids: list[int], output_id: int, user_id: int, **kwargs +): """Print multiple reports against the provided template. Arguments: template_id: The ID of the ReportTemplate to use item_ids: List of item IDs to generate the report against - output_id: The ID of the DataOutput to use (if provided) + output_id: The ID of the DataOutput to use + user_id: The ID of the user to associate with the generated report This function is intended to be called by the background worker, and will continuously update the status of the DataOutput object. @@ -31,6 +36,18 @@ def print_reports(template_id: int, item_ids: list[int], output_id: int, **kwarg log_error('report.tasks.print_reports') return + # Fetch user information + user = None + + if user_id: + try: + user = get_user_model().objects.get(pk=user_id) + except Exception: + log_error('report.tasks.print_reports', user_id=user_id) + + if not user: + user = getattr(output, 'user', None) + # Fetch the items to be included in the report model = template.get_model() items = model.objects.filter(pk__in=item_ids) @@ -38,20 +55,26 @@ def print_reports(template_id: int, item_ids: list[int], output_id: int, **kwarg # Ensure they are sorted by the order of the provided item IDs items = sorted(items, key=lambda item: item_ids.index(item.pk)) - template.print(items, output=output) + template.print(items, output=output, user=user) @tracer.start_as_current_span('print_labels') def print_labels( - template_id: int, item_ids: list[int], output_id: int, plugin_slug: str, **kwargs + template_id: int, + item_ids: list[int], + output_id: int, + user_id: int, + plugin_slug: str, + **kwargs, ): """Print multiple labels against the provided template. Arguments: template_id: The ID of the LabelTemplate to use item_ids: List of item IDs to generate the labels against - output_id: The ID of the DataOutput to use (if provided) - plugin_slug: The ID of the LabelPlugin to use (if provided) + output_id: The ID of the DataOutput to use + user_id: The ID of the user to associate with the generated labels + plugin_slug: The ID of the LabelPlugin to use This function is intended to be called by the background worker, and will continuously update the status of the DataOutput object. @@ -67,6 +90,18 @@ def print_labels( log_error('report.tasks.print_labels') return + # Fetch user information + user = None + + if user_id: + try: + user = get_user_model().objects.get(pk=user_id) + except Exception: + log_error('report.tasks.print_labels', user_id=user_id) + + if not user: + user = getattr(output, 'user', None) + # Fetch the items to be included in the report model = template.get_model() items = model.objects.filter(pk__in=item_ids) @@ -83,4 +118,4 @@ def print_labels( # Extract optional arguments for label printing options = kwargs.pop('options') or {} - template.print(items, plugin, output=output, options=options) + template.print(items, plugin, output=output, user=user, options=options) diff --git a/src/backend/InvenTree/report/templates/report/inventree_transfer_order_report.html b/src/backend/InvenTree/report/templates/report/inventree_transfer_order_report.html new file mode 100644 index 0000000000..1b88d0275f --- /dev/null +++ b/src/backend/InvenTree/report/templates/report/inventree_transfer_order_report.html @@ -0,0 +1,52 @@ +{% extends "report/inventree_order_report_base.html" %} + +{% load i18n %} +{% load report %} +{% load barcode %} +{% load inventree_extras %} +{% load markdownify %} + +{% block header_content %} + +
+

{% trans "Transfer Order" %} {{ prefix }}{{ reference }}

+ {{ order.take_from.pathstring }} → {{ order.destination.pathstring }} +
+ +{% endblock header_content %} + +{% block page_content %} + +

{% trans "Line Items" %}

+ + + + + + + + + + + + + {% for line in lines.all %} + + + + + + + + {% endfor %} + +
{% trans "Part" %}{% trans "Reference" %}{% trans "Quantity" %}{% trans "Transferred" %}{% trans "Note" %}
+
+ {% trans "Part image" %} +
+
+ {{ line.part.full_name }} +
+
{{ line.reference }}{% decimal line.quantity %}{% decimal line.transferred %}{{ line.notes }}
+ +{% endblock page_content %} diff --git a/src/backend/InvenTree/report/tests.py b/src/backend/InvenTree/report/tests.py index 6d36e7762f..e5474029ce 100644 --- a/src/backend/InvenTree/report/tests.py +++ b/src/backend/InvenTree/report/tests.py @@ -6,8 +6,12 @@ from io import StringIO from django.apps import apps from django.conf import settings from django.core.cache import cache +from django.core.files.base import ContentFile +from django.core.files.storage import default_storage from django.urls import reverse +from pypdf import PdfReader + import report.models as report_models from build.models import Build from common.models import Attachment @@ -299,6 +303,92 @@ class ReportTest(InvenTreeAPITestCase): self.assertIsNotNone(output.output) self.assertTrue(output.output.name.endswith('.pdf')) + def test_print_custom_template(self): + """Create a new template, print it, and check the output.""" + template_string = """ + Hello {{ user.username }} + Your user ID is {{ user.pk }}. + Template name: {{ template.name }} + {% if merge %} + REPORT OUTPUT: MERGE = ENABLED + {% for instance in instances %} + Part Name: {{ instance.part.name }} + Stock ID: {{ instance.stock_item.pk }} + {% endfor %} + {% else %} + REPORT OUTPUT: MERGE = DISABLED + Part Name: {{ part.name }} + Stock ID: {{ stock_item.pk }} + {% endif %} + """ + + template_file = ContentFile( + template_string.encode('utf-8'), name='TestPrintTemplate.html' + ) + + # Create a new report template with the above string as the template + template = ReportTemplate.objects.create( + name='Test report template', + model_type='stockitem', + template=template_file, + filename_pattern='unit_test_report.pdf', + ) + + item = StockItem.objects.first() + + test_strings = [ + f'Hello {self.user.username}', + f'Your user ID is {self.user.pk}.', + f'Template name: {template.name}', + f'Part Name: {item.part.name}', + f'Stock ID: {item.pk}', + ] + + url = reverse('api-report-print') + post_data = {'template': template.pk, 'items': [item.pk]} + + # Test with "debug" both enabled and disabled + for debug in [True, False]: + set_global_setting('REPORT_DEBUG_MODE', debug) + + # Test with "merge" both enabled and disabled + for merge in [True, False]: + template.merge = merge + template.save() + + # Generate report via the API + data = self.post(url, data=post_data).data + + self.assertEqual(data['user'], self.user.pk) + self.assertIsNotNone(data['output']) + self.assertTrue(data['output'].endswith('.html' if debug else '.pdf')) + self.assertIn('unit_test_report', data['output']) + + if debug: + # Read raw HTML file + output = default_storage.open( + data['output'].replace('/media/', '', 1) + ) + file_content = str(output.read(), 'utf-8') + else: + # Convert from PDF bytes to string for testing purposes + output_path = os.path.join( + settings.MEDIA_ROOT, data['output'].replace('/media/', '', 1) + ) + reader = PdfReader(output_path) + file_content = ''.join(page.extract_text() for page in reader.pages) + + # Replace any newline characters for testing purposes + file_content = file_content.replace('\n', ' ') + + for ts in test_strings: + self.assertIn(ts, file_content) + + self.assertIn( + f'REPORT OUTPUT: MERGE = {"ENABLED" if merge else "DISABLED"}', + file_content, + ) + class LabelTest(InvenTreeAPITestCase): """Unit tests for label templates.""" @@ -351,6 +441,71 @@ class LabelTest(InvenTreeAPITestCase): self.assertEqual(output.plugin, 'inventreelabel') self.assertTrue(output.output.name.endswith('.pdf')) + def test_print_custom_template(self): + """Test printing against a custom template file.""" + template_string = """ + Hello {{ user.username }} - your user ID is {{ user.pk }}. + Template name: {{ template.name }} + Barcode: {{ qr_data }} + Location ID: {{ location.pk }} + Base URL: {{ base_url }} + """ + + template_file = ContentFile( + template_string.encode('utf-8'), name='TestLabelTemplate.html' + ) + + # Create a new label template with the above string as the template + template = LabelTemplate.objects.create( + name='Test label template', + model_type='stocklocation', + template=template_file, + filename_pattern='unit_test_label.pdf', + ) + + location = StockItem.objects.exclude(location=None).first().location + + url = reverse('api-label-print') + post_data = {'template': template.pk, 'items': [location.pk]} + + plugin = registry.get_plugin('inventreelabel') + + test_strings = [ + f'Hello {self.user.username} - your user ID is {self.user.pk}.', + f'Template name: {template.name}', + f'Location ID: {location.pk}', + f'INV-SL{location.pk}', + ] + + # Test with "debug" both enabled and disabled + for debug in [True, False]: + plugin.set_setting('DEBUG', debug) + + # Generate label via the API + data = self.post(url, data=post_data).data + + self.assertEqual(data['user'], self.user.pk) + self.assertTrue(data['output'].endswith('.html' if debug else '.pdf')) + + # Read the file contents back out, and validate + if debug: + # Read raw HTML file + output = default_storage.open(data['output'].replace('/media/', '', 1)) + file_content = str(output.read(), 'utf-8') + else: + # Convert from PDF bytes to string for testing purposes + output_path = os.path.join( + settings.MEDIA_ROOT, data['output'].replace('/media/', '', 1) + ) + reader = PdfReader(output_path) + file_content = ''.join(page.extract_text() for page in reader.pages) + + # Replace any newline for testing purposes + file_content = file_content.replace('\n', ' ') + + for ts in test_strings: + self.assertIn(ts, file_content) + def test_filters(self): """Test that template filters are correctly validated.""" from django.core.exceptions import ValidationError diff --git a/src/backend/InvenTree/stock/api.py b/src/backend/InvenTree/stock/api.py index c26091a3d7..b93b8edf2c 100644 --- a/src/backend/InvenTree/stock/api.py +++ b/src/backend/InvenTree/stock/api.py @@ -53,11 +53,12 @@ from InvenTree.mixins import ( RetrieveUpdateDestroyAPI, SerializerContextMixin, ) -from order.models import PurchaseOrder, ReturnOrder, SalesOrder +from order.models import PurchaseOrder, ReturnOrder, SalesOrder, TransferOrder from order.serializers import ( PurchaseOrderSerializer, ReturnOrderSerializer, SalesOrderSerializer, + TransferOrderSerializer, ) from part.models import BomItem, Part, PartCategory from part.serializers import PartBriefSerializer @@ -430,11 +431,15 @@ class StockLocationDetail( def destroy(self, request, *args, **kwargs): """Delete a Stock location instance via the API.""" + serializer = StockSerializers.LocationDeleteSerializer(data=request.data) + serializer.is_valid(raise_exception=True) + delete_stock_items = InvenTree.helpers.str2bool( - request.data.get('delete_stock_items', False) + serializer.validated_data.get('delete_stock_items', False) ) + delete_sub_locations = InvenTree.helpers.str2bool( - request.data.get('delete_sub_locations', False) + serializer.validated_data.get('delete_sub_locations', False) ) return super().destroy( @@ -668,13 +673,17 @@ class StockFilter(FilterSet): def filter_allocated(self, queryset, name, value): """Filter by whether or not the stock item is 'allocated'.""" if str2bool(value): - # Filter StockItem with either build allocations or sales order allocations + # Filter StockItem with either build allocations or transfer order allocations or sales order allocations return queryset.filter( - Q(sales_order_allocations__isnull=False) | Q(allocations__isnull=False) + Q(sales_order_allocations__isnull=False) + | Q(transfer_order_allocations__isnull=False) + | Q(allocations__isnull=False) ).distinct() - # Filter StockItem without build allocations or sales order allocations + # Filter StockItem without build allocations or transfer order allocations or sales order allocations return queryset.filter( - Q(sales_order_allocations__isnull=True) & Q(allocations__isnull=True) + Q(sales_order_allocations__isnull=True) + & Q(transfer_order_allocations__isnull=True) + & Q(allocations__isnull=True) ) expired = rest_filters.BooleanFilter(label='Expired', method='filter_expired') @@ -1234,7 +1243,7 @@ class StockList( ): tracking.append(entry) - StockItemTracking.objects.bulk_create(tracking) + StockItemTracking.objects.bulk_create(tracking, batch_size=250) # Annotate the stock items with part information queryset = StockSerializers.StockItemSerializer.annotate_queryset(items) @@ -1580,6 +1589,7 @@ class StockTrackingList( 'purchaseorder': (PurchaseOrder, PurchaseOrderSerializer), 'salesorder': (SalesOrder, SalesOrderSerializer), 'returnorder': (ReturnOrder, ReturnOrderSerializer), + 'transferorder': (TransferOrder, TransferOrderSerializer), 'buildorder': (Build, BuildSerializer), 'item': (StockItem, StockSerializers.StockItemSerializer), 'stockitem': (StockItem, StockSerializers.StockItemSerializer), diff --git a/src/backend/InvenTree/stock/models.py b/src/backend/InvenTree/stock/models.py index d941919706..040daee86e 100644 --- a/src/backend/InvenTree/stock/models.py +++ b/src/backend/InvenTree/stock/models.py @@ -47,6 +47,7 @@ from InvenTree.status_codes import ( StockStatus, StockStatusGroups, ) +from order.status_codes import TransferOrderStatusGroups from part import models as PartModels from plugin.events import trigger_event from stock.events import StockEvents @@ -449,6 +450,95 @@ class StockItem( order_insertion_by = ['part'] + def save(self, *args, **kwargs): + """Save this StockItem to the database. + + Performs a number of checks: + - Unique serial number requirement + - Adds a transaction note when the item is first created. + """ + self.validate_unique() + self.clean() + self.update_serial_number() + + user = kwargs.pop('user', None) + + if user is None: + user = getattr(self, '_user', None) + + # If 'add_note = False' specified, then no tracking note will be added for item creation + add_note = kwargs.pop('add_note', True) + + notes = kwargs.pop('notes', '') + + if self.pk: + # StockItem has already been saved + + # Check if "interesting" fields have been changed + # (we wish to record these as historical records) + + try: + old = StockItem.objects.get(pk=self.pk) + old_custom_status = old.get_custom_status() + custom_status = self.get_custom_status() + + deltas = {} + + # Status changed? + if old.status != self.status: + # Custom status changed? + # Matches custom status tracking behavior of StockChangeStatusSerializer + if old_custom_status != custom_status: + deltas['status'] = custom_status + deltas['status_logical'] = self.status + else: + deltas['status'] = self.status + deltas['status_logical'] = self.status + + if old_custom_status: + deltas['old_status'] = old_custom_status + deltas['old_status_logical'] = old.status + else: + deltas['old_status'] = old.status + deltas['old_status_logical'] = old.status + + if add_note and len(deltas) > 0: + self.add_tracking_entry( + StockHistoryCode.EDITED, user, deltas=deltas, notes=notes + ) + + except (ValueError, StockItem.DoesNotExist): + pass + + super().save(*args, **kwargs) + + # If user information is provided, and no existing note exists, create one! + if add_note and self.tracking_info.count() == 0: + tracking_info = {'status': self.status} + + self.add_tracking_entry( + StockHistoryCode.CREATED, + user, + deltas=tracking_info, + notes=notes, + location=self.location, + quantity=float(self.quantity), + ) + + def delete(self, ignore_serial_check: bool = False, **kwargs): + """Custom delete method for StockItem model. + + Arguments: + ignore_serial_check: If True, allow deletion of serialized stock items regardless of global setting + """ + if not ignore_serial_check and not get_global_setting( + 'STOCK_ALLOW_DELETE_SERIALIZED', cache=False + ): + if self.serialized: + raise ValidationError(_('Serialized stock items cannot be deleted')) + + super().delete(**kwargs) + @staticmethod def get_api_url(): """Return API url.""" @@ -634,7 +724,7 @@ class StockItem( items.append(StockItem(**data)) # Create the StockItem objects in bulk - StockItem.objects.bulk_create(items) + StockItem.objects.bulk_create(items, batch_size=250) # We will need to rebuild the stock item tree manually, due to the bulk_create operation if parent and parent.tree_id: @@ -770,82 +860,6 @@ class StockItem( """Return the 'previous' stock item (based on serial number).""" return self.get_next_serialized_item(reverse=True) - def save(self, *args, **kwargs): - """Save this StockItem to the database. - - Performs a number of checks: - - Unique serial number requirement - - Adds a transaction note when the item is first created. - """ - self.validate_unique() - self.clean() - - self.update_serial_number() - - user = kwargs.pop('user', None) - - if user is None: - user = getattr(self, '_user', None) - - # If 'add_note = False' specified, then no tracking note will be added for item creation - add_note = kwargs.pop('add_note', True) - - notes = kwargs.pop('notes', '') - - if self.pk: - # StockItem has already been saved - - # Check if "interesting" fields have been changed - # (we wish to record these as historical records) - - try: - old = StockItem.objects.get(pk=self.pk) - old_custom_status = old.get_custom_status() - custom_status = self.get_custom_status() - - deltas = {} - - # Status changed? - if old.status != self.status: - # Custom status changed? - # Matches custom status tracking behavior of StockChangeStatusSerializer - if old_custom_status != custom_status: - deltas['status'] = custom_status - deltas['status_logical'] = self.status - else: - deltas['status'] = self.status - deltas['status_logical'] = self.status - - if old_custom_status: - deltas['old_status'] = old_custom_status - deltas['old_status_logical'] = old.status - else: - deltas['old_status'] = old.status - deltas['old_status_logical'] = old.status - - if add_note and len(deltas) > 0: - self.add_tracking_entry( - StockHistoryCode.EDITED, user, deltas=deltas, notes=notes - ) - - except (ValueError, StockItem.DoesNotExist): - pass - - super().save(*args, **kwargs) - - # If user information is provided, and no existing note exists, create one! - if add_note and self.tracking_info.count() == 0: - tracking_info = {'status': self.status} - - self.add_tracking_entry( - StockHistoryCode.CREATED, - user, - deltas=tracking_info, - notes=notes, - location=self.location, - quantity=float(self.quantity), - ) - @property def status_label(self): """Return label.""" @@ -922,6 +936,17 @@ class StockItem( if type(self.batch) is str: self.batch = self.batch.strip() + if not get_global_setting('STOCK_ALLOW_EDIT_SERIAL'): + deltas = self.get_field_deltas() + + # Prevent editing of serial numbers if the item already has a serial number assigned + if 'serial' in deltas and deltas['serial']['old'] not in [None, '']: + raise ValidationError({ + 'serial': _( + 'Editing of serial numbers is not allowed - this item has already been assigned a serial number' + ) + }) + # Custom validation of batch code self.validate_batch_code() @@ -1511,7 +1536,7 @@ class StockItem( item.save(add_note=False) def is_allocated(self): - """Return True if this StockItem is allocated to a SalesOrder or a Build.""" + """Return True if this StockItem is allocated to a SalesOrder, TransferOrder, or a Build.""" return self.allocation_count() > 0 def build_allocation_count(self, **kwargs): @@ -1571,12 +1596,48 @@ class StockItem( return total + def get_transfer_order_allocations(self, active=True, **kwargs): + """Return a queryset for TransferOrderAllocations against this StockItem, with optional filters. + + Arguments: + active: Filter by 'active' status of the allocation + """ + query = self.transfer_order_allocations.all() + + if filter_allocations := kwargs.get('filter_allocations'): + query = query.filter(**filter_allocations) + + if exclude_allocations := kwargs.get('exclude_allocations'): + query = query.exclude(**exclude_allocations) + + if active is True: + query = query.filter(line__order__status__in=TransferOrderStatusGroups.OPEN) + elif active is False: + query = query.exclude( + line__order__status__in=TransferOrderStatusGroups.OPEN + ) + + return query + + def transfer_order_allocation_count(self, active=True, **kwargs): + """Return the total quantity allocated to TransferOrders.""" + query = self.get_transfer_order_allocations(active=active, **kwargs) + query = query.aggregate(q=Coalesce(Sum('quantity'), Decimal(0))) + + total = query['q'] + + if total is None: + total = Decimal(0) + + return total + def allocation_count(self): """Return the total quantity allocated to builds or orders.""" bo = self.build_allocation_count() so = self.sales_order_allocation_count() + to = self.transfer_order_allocation_count() - return bo + so + return bo + so + to def unallocated_quantity(self): """Return the quantity of this StockItem which is *not* allocated.""" @@ -1973,7 +2034,7 @@ class StockItem( # Copy any test results from this item to the new one item.copyTestResultsFrom(self) - StockItemTracking.objects.bulk_create(history_items) + StockItemTracking.objects.bulk_create(history_items, batch_size=250) # Remove the equivalent number of items self.take_stock( @@ -2008,7 +2069,7 @@ class StockItem( result.stock_item = self results_to_create.append(result) - StockItemTestResult.objects.bulk_create(results_to_create) + StockItemTestResult.objects.bulk_create(results_to_create, batch_size=250) def add_test_result(self, create_template=True, **kwargs): """Helper function to add a new StockItemTestResult. @@ -2306,6 +2367,10 @@ class StockItem( deltas = {'stockitem': self.pk} + transferorder = kwargs.pop('transferorder', None) + if transferorder: + deltas['transferorder'] = transferorder.pk + # Optional fields which can be supplied in a 'move' call for field in StockItem.optional_transfer_fields(): if field in kwargs: @@ -2454,6 +2519,10 @@ class StockItem( ) tracking_info['old_status_logical'] = old_status_logical + transferorder = kwargs.pop('transferorder', None) + if transferorder: + tracking_info['transferorder'] = transferorder.pk + # Optional fields which can be supplied in a 'move' call for field in StockItem.optional_transfer_fields(): if field in kwargs: @@ -2693,6 +2762,10 @@ class StockItem( setattr(self, field, kwargs[field]) deltas[field] = kwargs[field] + transferorder = kwargs.pop('transferorder', None) + if transferorder: + deltas['transferorder'] = transferorder.pk + self.save(add_note=False) self.add_tracking_entry( diff --git a/src/backend/InvenTree/stock/serializers.py b/src/backend/InvenTree/stock/serializers.py index 35a5885430..570b4f7e51 100644 --- a/src/backend/InvenTree/stock/serializers.py +++ b/src/backend/InvenTree/stock/serializers.py @@ -520,6 +520,8 @@ class StockItemSerializer( allocated=Coalesce( SubquerySum('sales_order_allocations__quantity'), Decimal(0) ) + # For now, stock allocated to a transfer order will not impact its availability + # + Coalesce(SubquerySum('transfer_order_allocations__quantity'), Decimal(0)) + Coalesce(SubquerySum('allocations__quantity'), Decimal(0)) ) @@ -1128,7 +1130,7 @@ class StockChangeStatusSerializer(serializers.Serializer): ) # Create tracking entries - StockItemTracking.objects.bulk_create(transaction_notes) + StockItemTracking.objects.bulk_create(transaction_notes, batch_size=250) class StockLocationTypeSerializer(InvenTree.serializers.InvenTreeModelSerializer): @@ -1167,6 +1169,27 @@ class LocationTreeSerializer(InvenTree.serializers.InvenTreeModelSerializer): return queryset.annotate(sublocations=stock.filters.annotate_sub_locations()) +class LocationDeleteSerializer(serializers.Serializer): + """Serializer for deleting a stock location.""" + + class Meta: + """Metaclass options.""" + + fields = ['delete_stock_items', 'delete_sub_locations'] + + delete_stock_items = serializers.BooleanField( + required=True, + label=_('Delete Stock Items'), + help_text=_('Delete all stock items contained within this location'), + ) + + delete_sub_locations = serializers.BooleanField( + required=True, + label=_('Delete Sublocations'), + help_text=_('Delete all sub-locations contained within this location'), + ) + + @register_importer() class LocationSerializer( InvenTree.serializers.FilterableSerializerMixin, @@ -1369,6 +1392,10 @@ class StockAssignmentItemSerializer(serializers.Serializer): if item.sales_order_allocations.count() > 0: raise ValidationError(_('Item is allocated to a sales order')) + # The item must not be allocated to a transfer order + if item.transfer_order_allocations.count() > 0: + raise ValidationError(_('Item is allocated to a transfer order')) + # The item must not be allocated to a build order if item.allocations.count() > 0: raise ValidationError(_('Item is allocated to a build order')) diff --git a/src/backend/InvenTree/stock/test_api.py b/src/backend/InvenTree/stock/test_api.py index e2a7b22b0c..d274fffafa 100644 --- a/src/backend/InvenTree/stock/test_api.py +++ b/src/backend/InvenTree/stock/test_api.py @@ -3,7 +3,6 @@ import os import random from datetime import datetime, timedelta -from enum import IntEnum from django.contrib.contenttypes.models import ContentType from django.core.exceptions import ValidationError @@ -142,13 +141,6 @@ class StockLocationTest(StockAPITestCase): def test_stock_location_delete(self): """Test stock location deletion with different parameters.""" - - class Target(IntEnum): - move_sub_locations_to_parent_move_stockitems_to_parent = (0,) - move_sub_locations_to_parent_delete_stockitems = (1,) - delete_sub_locations_move_stockitems_to_parent = (2,) - delete_sub_locations_delete_stockitems = (3,) - # First, construct a set of template / variant parts part = Part.objects.create( name='Part for stock item creation', @@ -157,117 +149,95 @@ class StockLocationTest(StockAPITestCase): is_template=False, ) - for i in range(4): - delete_sub_locations: bool = False - delete_stock_items: bool = False - - if i in ( - Target.move_sub_locations_to_parent_delete_stockitems, - Target.delete_sub_locations_delete_stockitems, - ): - delete_stock_items = True - if i in ( - Target.delete_sub_locations_move_stockitems_to_parent, - Target.delete_sub_locations_delete_stockitems, - ): - delete_sub_locations = True - - # Create a parent stock location - parent_stock_location = StockLocation.objects.create( - name='Parent stock location', - description='This is the parent stock location where the sub categories and stock items are moved to', - parent=None, - ) - - stocklocation_count_before = StockLocation.objects.count() - stock_location_count_before = StockItem.objects.count() - - # Create a stock location to be deleted - stock_location_to_delete = StockLocation.objects.create( - name='Stock location to delete', - description='This is the stock location to be deleted', - parent=parent_stock_location, - ) - - url = reverse( - 'api-location-detail', kwargs={'pk': stock_location_to_delete.id} - ) - - stock_items = [] - # Create stock items in the location to be deleted - for jj in range(3): - stock_items.append( - StockItem.objects.create( - batch=f'Batch xyz {jj}', - location=stock_location_to_delete, - part=part, - ) + for delete_sub_locations in [False, True]: + for delete_stock_items in [False, True]: + # Create a parent stock location + parent_stock_location = StockLocation.objects.create( + name='Parent stock location', + description='This is the parent stock location where the sub categories and stock items are moved to', + parent=None, ) - child_stock_locations = [] - child_stock_locations_items = [] - # Create sub location under the stock location to be deleted - for ii in range(3): - child = StockLocation.objects.create( - name=f'Sub-location {ii}', - description='A sub-location of the deleted stock location', - parent=stock_location_to_delete, - ) - child_stock_locations.append(child) + location_count_before = StockLocation.objects.count() + item_count_before = StockItem.objects.count() - # Create stock items in the sub locations + # Create a stock location to be deleted + location_to_delete = StockLocation.objects.create( + name='Stock location to delete', + description='This is the stock location to be deleted', + parent=parent_stock_location, + ) + + url = reverse( + 'api-location-detail', kwargs={'pk': location_to_delete.id} + ) + + stock_items = [] + + # Create stock items in the location to be deleted for jj in range(3): - child_stock_locations_items.append( + stock_items.append( StockItem.objects.create( - batch=f'B xyz {jj}', part=part, location=child + batch=f'Batch xyz {jj}', + location=location_to_delete, + part=part, ) ) - # Delete the created stock location - params = {} - if delete_stock_items: - params['delete_stock_items'] = '1' - if delete_sub_locations: - params['delete_sub_locations'] = '1' - response = self.delete(url, params, expected_code=204) + child_locations = [] + child_locations_items = [] - self.assertEqual(response.status_code, 204) + # Create sub location under the stock location to be deleted + for ii in range(3): + child = StockLocation.objects.create( + name=f'Sub-location {ii}', + description='A sub-location of the deleted stock location', + parent=location_to_delete, + ) + child_locations.append(child) - if delete_stock_items: - if i == Target.delete_sub_locations_delete_stockitems: - # Check if all sub-categories deleted + # Create stock items in the sub locations + for jj in range(3): + child_locations_items.append( + StockItem.objects.create( + batch=f'B xyz {jj}', part=part, location=child + ) + ) + + # Delete the created stock location + params = { + 'delete_stock_items': delete_stock_items, + 'delete_sub_locations': delete_sub_locations, + } + + response = self.delete(url, data=params, expected_code=204) + + self.assertEqual(response.status_code, 204) + + # If we were deleting stock items, the count must not have changed + if delete_stock_items: + extra_items = 0 if delete_sub_locations else 9 self.assertEqual( - StockItem.objects.count(), stock_location_count_before + StockItem.objects.count(), item_count_before + extra_items ) - elif i == Target.move_sub_locations_to_parent_delete_stockitems: - # Check if all stock locations deleted - self.assertEqual( - StockItem.objects.count(), - stock_location_count_before + len(child_stock_locations_items), - ) - else: - # Stock locations moved to the parent location - for stock_item in stock_items: - stock_item.refresh_from_db() - self.assertEqual(stock_item.location, parent_stock_location) + else: + # Stock items moved to the parent location + self.assertGreater(StockItem.objects.count(), item_count_before) + + for stock_item in stock_items: + stock_item.refresh_from_db() + self.assertEqual(stock_item.location, parent_stock_location) if delete_sub_locations: - for child_stock_location_item in child_stock_locations_items: - child_stock_location_item.refresh_from_db() - self.assertEqual( - child_stock_location_item.location, parent_stock_location - ) - - if delete_sub_locations: - # Check if all sub-locations are deleted - self.assertEqual( - StockLocation.objects.count(), stocklocation_count_before - ) - else: - # Check if all sub-locations moved to the parent - for child in child_stock_locations: - child.refresh_from_db() - self.assertEqual(child.parent, parent_stock_location) + # Check if all sub-categories deleted + self.assertEqual( + StockLocation.objects.count(), location_count_before + ) + else: + # Check if all sub-categories moved to the parent category + for location in child_locations: + location.refresh_from_db() + self.assertEqual(location.parent, parent_stock_location) def test_output_options(self): """Test output options.""" @@ -602,9 +572,7 @@ class StockItemListTest(StockAPITestCase): ) ) - if len(items) >= 100: - StockItem.objects.bulk_create(items) - items = [] + StockItem.objects.bulk_create(items, batch_size=250) self.assertEqual(StockItem.objects.count(), 1000) @@ -1646,6 +1614,36 @@ class StockItemTest(StockAPITestCase): ) self.assertEqual(trackable_part.get_stock_count(), 10) + def test_edit_serial(self): + """Test that we can edit serial numbers via the API.""" + item = StockItem.objects.create( + part=Part.objects.filter(trackable=True).first(), + quantity=1, + location=StockLocation.objects.first(), + ) + + set_global_setting('STOCK_ALLOW_EDIT_SERIAL', False) + + url = reverse('api-stock-detail', kwargs={'pk': item.pk}) + + # Edit the serial number + # This should succeed, as the initial serial number is blank + response = self.patch(url, {'serial': '54321'}, expected_code=200) + self.assertEqual(response.data['serial'], '54321') + + # Edit it again - this time, should fail as the serial number is already set + response = self.patch(url, {'serial': '98765'}, expected_code=400) + self.assertIn('Editing of serial numbers is not allowed', str(response.data)) + + # Ensure that changing a different field does not cause an error + response = self.patch(url, {'batch': 'abcde'}, expected_code=200) + self.assertEqual(response.data['batch'], 'abcde') + + # Adjust the setting to allow serial editing + set_global_setting('STOCK_ALLOW_EDIT_SERIAL', True) + response = self.patch(url, {'serial': '98765'}, expected_code=200) + self.assertEqual(response.data['serial'], '98765') + def test_default_expiry(self): """Test that the "default_expiry" functionality works via the API. @@ -2183,6 +2181,37 @@ class StockItemDeletionTest(StockAPITestCase): self.assertEqual(StockItem.objects.count(), n) + def test_delete_serialized(self): + """Test deletion of serialized stock items.""" + trackable_part = part.models.Part.objects.create( + name='My part', + description='A trackable part', + trackable=True, + default_location=StockLocation.objects.get(pk=1), + ) + + stock_item = StockItem.objects.create( + part=trackable_part, quantity=1, serial='12345' + ) + + set_global_setting('STOCK_ALLOW_DELETE_SERIALIZED', False) + + response = self.delete( + reverse('api-stock-detail', kwargs={'pk': stock_item.pk}), expected_code=400 + ) + + self.assertIn('Serialized stock items cannot be deleted', str(response.data)) + + set_global_setting('STOCK_ALLOW_DELETE_SERIALIZED', True) + + response = self.delete( + reverse('api-stock-detail', kwargs={'pk': stock_item.pk}), expected_code=204 + ) + + self.get( + reverse('api-stock-detail', kwargs={'pk': stock_item.pk}), expected_code=404 + ) + class StockTestResultTest(StockAPITestCase): """Tests for StockTestResult APIs.""" diff --git a/src/backend/InvenTree/users/api.py b/src/backend/InvenTree/users/api.py index 6e07f35c77..13ef2fa501 100644 --- a/src/backend/InvenTree/users/api.py +++ b/src/backend/InvenTree/users/api.py @@ -33,6 +33,7 @@ from InvenTree.mixins import ( SerializerContextMixin, UpdateAPI, ) +from InvenTree.schema import exclude_from_schema from InvenTree.settings import FRONTEND_URL_BASE from users.models import ApiToken, Owner, RuleSet, UserProfile from users.serializers import ( @@ -501,8 +502,38 @@ class UserProfileDetail(RetrieveUpdateAPI): user_urls = [ - path('roles/', RoleDetails.as_view(), name='api-user-roles'), - path('token/', ensure_csrf_cookie(GetAuthToken.as_view()), name='api-token'), + # Legacy endpoints (to avoid breaking existing API clients) + # TODO @matmair - remove these legacy endpoints in the next breaking release + path( + 'roles/', + exclude_from_schema(RoleDetails, '/api/user/me/roles/').as_view(), + name='api-user-roles_legacy', + ), + path( + 'token/', + ensure_csrf_cookie( + exclude_from_schema(GetAuthToken, '/api/user/me/token/').as_view() + ), + name='api-token_legacy', + ), + path( + 'profile/', + exclude_from_schema(UserProfileDetail, '/api/user/me/profile/').as_view(), + name='api-user-profile_legacy', + ), + # Individual user endpoints + path( + 'me/', + include([ + path('profile/', UserProfileDetail.as_view(), name='api-user-profile'), + path('roles/', RoleDetails.as_view(), name='api-user-roles'), + path( + 'token/', ensure_csrf_cookie(GetAuthToken.as_view()), name='api-token' + ), + path('', MeUserDetail.as_view(), name='api-user-me'), + ]), + ), + # User related endpoints path( 'tokens/', include([ @@ -510,8 +541,6 @@ user_urls = [ path('', TokenListView.as_view(), name='api-token-list'), ]), ), - path('me/', MeUserDetail.as_view(), name='api-user-me'), - path('profile/', UserProfileDetail.as_view(), name='api-user-profile'), path( 'owner/', include([ diff --git a/src/backend/InvenTree/users/models.py b/src/backend/InvenTree/users/models.py index a89f3f921c..54fb8ae2da 100644 --- a/src/backend/InvenTree/users/models.py +++ b/src/backend/InvenTree/users/models.py @@ -179,9 +179,7 @@ class ApiToken(AuthToken, InvenTree.models.MetadataMixin): if self.pk is None: return self.key # pragma: no cover - M = len(self.key) - 20 - - return self.key[:8] + '*' * M + self.key[-12:] + return InvenTree.helpers.sanitize_token(self.key) @property @admin.display(boolean=True, description=_('Expired')) diff --git a/src/backend/InvenTree/users/oauth2_scopes.py b/src/backend/InvenTree/users/oauth2_scopes.py index 123cb8d528..52656a33fa 100644 --- a/src/backend/InvenTree/users/oauth2_scopes.py +++ b/src/backend/InvenTree/users/oauth2_scopes.py @@ -20,6 +20,7 @@ _roles = { 'purchase_order': 'Role Purchase Orders', 'sales_order': 'Role Sales Orders', 'return_order': 'Role Return Orders', + 'transfer_order': 'Role Transfer Orders', } _methods = {'view': 'GET', 'add': 'POST', 'change': 'PUT / PATCH', 'delete': 'DELETE'} diff --git a/src/backend/InvenTree/users/ruleset.py b/src/backend/InvenTree/users/ruleset.py index 272a30d452..3787eb89b9 100644 --- a/src/backend/InvenTree/users/ruleset.py +++ b/src/backend/InvenTree/users/ruleset.py @@ -19,6 +19,7 @@ class RuleSetEnum(StringEnum): PURCHASE_ORDER = 'purchase_order' SALES_ORDER = 'sales_order' RETURN_ORDER = 'return_order' + TRANSFER_ORDER = 'transfer_order' # This is a list of all the ruleset choices available in the system. @@ -34,6 +35,7 @@ RULESET_CHOICES = [ (RuleSetEnum.PURCHASE_ORDER, _('Purchase Orders')), (RuleSetEnum.SALES_ORDER, _('Sales Orders')), (RuleSetEnum.RETURN_ORDER, _('Return Orders')), + (RuleSetEnum.TRANSFER_ORDER, _('Transfer Orders')), ] # Ruleset names available in the system. @@ -161,6 +163,11 @@ def get_ruleset_models() -> dict: 'order_returnorderlineitem', 'order_returnorderextraline', ], + RuleSetEnum.TRANSFER_ORDER: [ + 'order_transferorder', + 'order_transferorderallocation', + 'order_transferorderlineitem', + ], } if settings.SITE_MULTI: diff --git a/src/backend/InvenTree/web/tests.py b/src/backend/InvenTree/web/tests.py index bed9ed43f6..04a25b73a1 100644 --- a/src/backend/InvenTree/web/tests.py +++ b/src/backend/InvenTree/web/tests.py @@ -30,7 +30,7 @@ class TemplateTagTest(InvenTreeTestCase): shipped_js = resp.split('